本期分享2个函数指针的例子以及利用typedef简化代码
1.
( *(void)(*)())0)();//代码含义
解释:
// 0 - int
// 0 - int*
// 0x0012ff40 - int
// 0x0012ff40 - int*
//void (*)() - 函数指针类型
//( void (*)() ) - 强制类型转换
//调用0地址处的函数
//1. 将0强制类型转化成 void (*)() 的函数指针
//2. 调用0地址处的函数 (* ( void (*)() ) 0 ) ()
2.
void (* signal)(int, void(*)(int)))(int);
解释
signal(int, void(*)(int));//函数名(整形, 函数指针),signal是函数声明
void (*)(int);//函数指针
//signal 函数返回类型也是一个函数指针
//该函数指针指向的函数有一个int类型的参数,返回类型是void
3.typedef - 对类型重命名,对代码进行简化
typedef unsigned int uint;
typedef int* ptr_t;
//typedef int(*)[10] parr_t;//error
typedef int(*parr_t)[10];
//typedef int (*)(int, int) pf_t;//error
typedef int (*pf_t)(int, int);//error
因此:
typedef void(* pf_t)(int);
pf_t signal(int,pf_t);//void (* signal)(int, void(*)(int)))(int);