简单介绍函数指针:
#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?