山不在高,有仙则名。水不在深,有龙则灵。
----CSDN 时时三省
阅读两段有趣的代码:
代码1:
(*(void(*)())0)();
意思是调用0地址处的函数
该函数无参,返回类型是void
1.void(*)()-函数指针
2.(void(*)())0-对0进行强制类型转换,被解释为一个函数地址
3.*(void(*)())0-对0地址进行了解引用操作
4.(*(void(*)())0)()-调用0地址处的函数
这段代码出自c〈陷阱和缺陷〉
代码2:
void(*signal(int,void(*)(int)))(int);
1.signal和()先结合,说明signal是函数名
2.signal函数的第一个参数的类型是int,第二个参数的类型是函数指针
该函数指针,指向一个参数为int,返回类型是void的函数
3.signal函数的返回类型也是一个函数指针
该函数指针,指向一个参数为int,返回类型是void的函数
signal是一个函数声明
函数指针数组:
函数指针数组-存放函数指针的数组
整型指针 int*
整型指针数组 int* arr[5];
示例:
等于是函数指针只需要在函数名后面加一个[]就是函数指针数组
函数指针数组里面它可以存放同类型的函数指针