在看了一下《C和指针》这本书的函数指针,发现自己对这些知识非常地陌生,哪怕自己大学两年都在学C/C++,但真的学习的不深入。
非常害怕泛而不精,出去找工作都可能没人要,所以下定决心这学期再忙也要花时间好好学习C/C++,把这门语言精通和吃透,毕竟不要在该奋斗的年纪选择了安逸。
#include<stdio.h>//学习函数指针
int add(int a,int b)
{
return a + b;
}
int main()
{
int x, y , z;
scanf("%d%d%d",&x,&y,&z);
printf("original function ans = %d!!\n",add(x,y));
int (*pf)( int,int) = &add;//函数指针,指向函数add的地址
printf("&add ans equals to %d!!\n",(*pf)(x,y));
//函数名被使用时总是由编译器把它转换成函数指针,add和&add其实是一样的
int (*pf2)( int,int) = add;
printf("add ans equals to %d!!\n",(*pf2)(x,y));
//间接访问操作符并不是必需的,因为编译器需要的是一个函数指针
int (*pf3)( int,int) = add;
printf("add ans equals to %d!!\n",pf3(x,y));
}
代码运行结果是:
也总算比较明白函数指针了。函数指针比较常用于回调函数,即在一个函数中调用另外一个函数,被调用函数则被当作参数传递过来。
比如我们常用的为结构体进行sort,都要先写一个cmp,这个sort(a,a+n,cmp)其实也可以写成sort(a,a+n,&cmp).因为函数名被使用时总是由编译器把它转换成函数指针
不过对于更高深的关于参数为void * 表示“一个指向未知类型的指针”的使用还不是很了解!先记录在此,望再接再厉!