指针函数与函数指针
函数指针与指针函数是在 C、C++ 中经常使用,并且非常容易混淆的概念之一,首先我们要理解这两个东西到底是什么东西 。指针函数顾名思义它的重点落在函数上,是一种函数叫做指针函数,他叫指针函数的原因是因为它的返回值类型是指针而函数指针呢 ? 它的重点落在指针上。它是一种特殊的指针,一种指向函数的指针 (因为函数名就是一个指针,是一种指向函数起始位置的指针)变量名和内存地址存在一个映射的关系,函数名就是一个标识符,其实它代表的是一个地址,函数的起始地址,函数指针就是通过指向这个地址来调用这个函数的。下面就来详细的讲一讲着两种东西
- 指针函数
指针函数就是返回值是指针变量的函数,如下所示
int *f(int a, int b);
注意 * 与 f 之间没有括号,* 是属于 int 的表示这个函数的返回值是一个指针如下所示
#include <iostream>
using namespace std;
double * square (double x) {
double * p = new double;
*p = x * x;
return p;
}
int main () {
double * ans = new double;
ans = square(5.0);
cout << ans << endl << *ans << endl;
return 0;
}
如果接受函数指针的值不是一个指针变量的话编译器就会报错
总之指针函数就是一个返回值是指针的函数,将放回值的地址返回给调用者,用于需要地址的地方。
- 函数指针
函数指针 顾名思义说的是一个指针,这个指针和普通指针不同的地方就在于它指向的对象是 一类函数 ,这类函数的返回值和指针的类型一致并且函数的形参列表和指针声明时候的形参列表一致即可。函数指针比较灵活类似于多态实现时候的方法。
它的声明方法如下
int (*f) (int,int)
只要是返回值是整形,并且函数的形参是两个整形的函数都可以通过这个函数指针进行调用。是不是很像多态 ?
程序例子如下
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int Max (int a,int b) {
return max (a,b);
}
int (*f) (int,int);
int main () {
f = Max;
int x = f (1,2);
cout << x << endl;
return 0;
}
注意上面的那个 f 不仅仅可以赋值成 max 函数 只要返回值是 int 两个参数都要求是 int 的就都可以进行赋值。非常的灵活。函数指针赋值成具体的某个函数以后就和函数名字一样了