首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大兄弟们,函数名也可以作为函数的参数,那为何还用函数指针

2013-12-20 
大兄弟们,函数名也可以作为函数的参数,那为什么还用函数指针?一个函数的参数有一个函数指针,如:void f(int

大兄弟们,函数名也可以作为函数的参数,那为什么还用函数指针?
一个函数的参数有一个函数指针,如:
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);
不过无论哪种形式,最后都要用到指针,只有指针才能有指向函数。在做参数的时候,你的那种形式会退化成一个指针,所以那样写没问题,但其他时候就不行了。这个和数组是一样的,数组做参数等价于指针做参数,正常情况下数组名则是一个右值,不能进行赋值操作。

热点排行