目录
2.void( * signal ( int,void( * )( int ) ) )( int )
建议在看函数指针前,了解一下数组指针,指针数数组的解析,假如本来就了解的化就可跳过。
一、函数指针(本质是指针)
其实函数的函数名也是一个地址,就像数组名一样,但&函数名,和函数名单独使用在函数指针时是一样的。
可以实践一下,代码如下。
void test()
{
printf("好好学习,天天编程\n");
}
int main()
{
printf("%p", test);
system("pause");
return 0;
}
那么它肯定可以也有像数组指针一样的类型函数指针。
void (*pfun)();//定义函数指针 void()() 函数声名后面一个括号里放的是参数列表。变量pfun先和*结合,本质是指针。然后 才是void()()函数声名。 则这就是一个函数指针,指针指向的函数无参数,返回值类型为void型。
pfun=test;//把函数的地址赋给函数指针pfun
也可以写成 pfun=&test;
既然知道了函数指针,那么辨析以下有趣的代码。
1.( * ( void( * )( ) )0)( ) ;
括号拆分法(*(void(*) ( ) ) 0 )( );
这是《CTraps and Pitfalls》这本经典的书中的一个例子。没有发狂吧?下面我们就来分