c语言函数指针问题
c语言的函数指针有什么用处吗?
还有
int (*fp)(void) = f;
*fp();//这样通过函数指针调用函数对吗??
fp();//这种与上一种有什么区别??(fp是一个指针,直接写fp这种比较难理解,我感觉*fp较好理解)
[解决办法]
应该是fp();*fp()是对它解引用了
[解决办法]
两种写法都是调用函数。使用函数指针比较灵活。比如你可以把函数指针作为参数传递等等
[解决办法]
编译器对函数指针还是比较宽容的。
实际上,应该用fp().
我做了下测试,fp,*fp,**fp它们的值都不变,与函数指针的地址相同。
也就是说,对于函数指针,其*操作被忽略掉了。
另外定义一个unsigned int *pp = (unsigned int *)fp;
然后你再*pp,其值就出错了。
[解决办法]
- C/C++ code
int test_func(){ return 100;}int main(int argc, char *argv[]){ int (*p)() = test_func; //测试发现,printf中的最后一个参数,用p,或者*p,或者**p,其反汇编的结果完全一致 printf("value of p is : 0x%x, **p is : 0x%x\n", p, **p); return 0;}
[解决办法]
fp()和 (*fp)()两种写法都可以,这个是C语言语法上的容错处理,类似于
int a[10]// 这样a 和 &a 是完全等同的,这是语法容错
*fp(),这种写法的意思是调用fp(),然后对结果解引用, 对一个int解引用会出错...
函数()结合的优先级高于解引用*