简单介绍函数指针:
#include <stdio.h>
int add(int x,int y)
{
return x+y;
}
int main()
{ 返回类型是整形 pf是指针变量 指向的是参数类型为(int,int) 的函数
int (*pf) (int,int) = add;将add的地址存入pf中
printf("%d\n",(*pf)(4,4));
return 0;
}
下面分析二段代码:
第一个:
(*((void (*)())0))() («c和陷阱» 中提及)
(*((void (*)())0))() 括号用不同的颜色标注
void (*)() 先分析它:它将函数名省略,函数指向void ,返回类型void
((void (*)())0) 首先0有二层含义:1.数字0 2.地址为0
0前面有void (*)() 代表强制类型转换 也就是地址0
(*((void (*)())0)) 解引用地址为0处的函数 , 函数参数无
第二个:signal函数名 函数参数为 int , void(*)(int) , 返回类型void(*)(int)
void( * signal( int , void(*)(int) ) )(int) 一般函数名后加参数 返回类型为去掉函数名和返回参数
首先:一般函数的声明为 int add(int x ,int y) 函数名 + 参数 + 返回类型
void(*)(int) 函数指针 ,指向int,返回void