1. 理解(*(void (*)())0)()----这是什么
从内到外一层层理解:
第一步:void (*)() 表示的是一个函数指针类型,函数无参数,无返回值类型;
第二步:(void (*)())0 表示的是将0强制转换为函数中指针类型;
第三步:(*(void(*)())0)()表示的是对0函数指针的函数调用;
2.函数指针数组
-----------简单来说就是“存放函数指针的数组”
#include <iostream> char * func0(char * str) { printf("func0 %s\n", str); return NULL; } char * func1(char *str) { printf("func1 %s\n", str); return NULL; } char * func2(char *str) { printf("func2 %s\n", str); return NULL; } int main() { char *(*pbuf[3])(char*); pbuf[0] = func0; pbuf[1] = &func1; pbuf[2] = &func2; *pbuf[0]("wei"); *pbuf[1]("you"); *pbuf[2]("qing"); system("pause"); return 0; }
输出结果:
func0 wei
func1 you
func2 qing
在以上的代码中:
第一步:函数的类型为char * ()(char*);函数参数是char *指针类型,返回值类型为char *指针;
第二步:使用此函数类型定义一个函数指针 char * (*ptr) (char*);
第三步:使用此函数类型定义一个函数指针数组 char* (*pbuf[3])(char *);
因此以上代码中定义的一个存放函数指针的数组就是char *(*pbuf[3](char *)); 剩下的代码自然也就好理解了!
3.