大兄弟们,函数名也可以作为函数的参数,那为什么还用函数指针?
一个函数的参数有一个函数指针,如:
void f(int(*p)(int,int));
我们也可以用函数名来做相应的事情,如:
void f(int p(int,int));
很明显,第2种方式要简便而且更加好懂,那为什么很多源代码中都喜欢使用函数指针呢?究竟是为什么?
[解决办法]
函数名本身就是一个指针,就比如数组名也是一个指针一样。你说的两种形式无非就是两种写法,没什么区别。一般人也不会这样写。都是先typedef一下,然后再用,这样更直观。比如:
//typedef int (*FP)(int,int);都是定义函数指针,只是看上去不同罢了
typedef int FP(int,int);
int f(FP *p);
不过无论哪种形式,最后都要用到指针,只有指针才能有指向函数。在做参数的时候,你的那种形式会退化成一个指针,所以那样写没问题,但其他时候就不行了。这个和数组是一样的,数组做参数等价于指针做参数,正常情况下数组名则是一个右值,不能进行赋值操作。
typedef int (*FP)(int,int);
int f(FP p);
typedef int FP(int,int);
int f(FP *p);