前言
在上一篇中,我们对对指针有了一个简单的刨析,在和一篇中,我们将加深难度,来探讨函数指针,回调函数等问题
1. 函数指针
#include <stdio.h>
void test()
{
printf("hehe\n");
}
int main()
{
printf("%p\n", test);
printf("%p\n", &test);
return 0;
}
我们可以看看,其输出结果如下,这两个输出结果就是函数test的地址
那么问题来了我们如何保存这个函数的地址呢?这里就要用到了函数指针。
首先要存储一个地址我们肯定需要的是一个指针,则p先与*结合(*p),第二步,(*p)指向的是一个函数,且指向的函数无参数
那么我们就可以写出一个可以保存test函数的指针
void (*pfun1)()
提升理解
为了提高对于函数指针的理解,我们将刨析一下两个很有意思的代码
// 代码 1( * ( void ( * )()) 0 )();拆解后可知:
1. void(*)() 表示函数指针类型,是一个函数指针
2. ( void()() )0 表示对0进行强制类型转换,把0强制类型转换成一个函数的地址;如(int)1.8882
3. * ( void()() )0 表示对0地址处的函数进行了解引用操作
4.(* ( void(*)() )0)() 则表示调用0地址处的函数————————————————————————————————
//代码二
void ( * signal ( int