如下内容都是从百度上找到的解说数组
1(*(void (*)())0)() 函数
第一步:void(*) (),能够明白这是一个函数指针类型。这个函数没有参数,没有返回值。指针
第二步:(void(*) ())0,这是将0强制转换为函数指针类型,0是一个地址,也就是说一个函数存在首地址为0的一段区域内。内存
第三步:(*(void(*) ())0),这是取0地址开始的一段内存里面的内容,其内容就是保存在首地址为0的一段区域内的函数。变量
第四步:(*(void(*) ())0)(),这是函数调用。百度
2,int *( * (*fpl ) ( int ) ) [10];float
第一步 *fpl 知道fpl是一个指针总结
第二步 *(*fpl)(int) 知道指针fpl指向一个形参为int,返回值为指针的函数(函数指针)参数
第三步 int *(*(*fpl)(int))[10] 知道该函数的指针指向一个数组,该数组有10个元素,而且每一个元素指向一个整数void
总结:fpl被声明为一个函数的指针,该函数返回值是一个指向指针数组的指针
3,int *(*(*arr [5])())();
第一步 *arr [5] 知道arr是指针数组,数组arr里有5个指针,每一个元素里存放着某某的地址
第二步*(*arr [5])() 知道函数指针数组,一个有5 个指针的数组,该指针指向一个形参为空,返回值为指针的函数
第三步int *(*(* arr [5])())()接上面,知道该函数返回一个指向函数指针的指针
总结:arr是一个数组,数组中存储的是5个指针,设为P0,P0指向无参数的函数F0,F0的返回值是指针P1,P1指向一个无参数的函数F1,F1的返回值为int型指针
4,float (*(*b())[ ])();
b:函数,形参为空,返回值为数组指针,该指针指向一个函数指针数组,该数组里的元素指向一个形参为空,返回值为float的函数。
5,void* (*c)(char, int(*)());
c:函数指针变量,该函数指针指向一个形参为char 、函数指针,返回值为void*,该函数指针的形参为空,返回值为int。
6,void** (*d)(int *,char **(*)(char *,char **));
d:函数指针变量,指向函数形参为char,函数指针,返回值为void **,该函数指针形参为 char*,char**,返回值为char**;
7,float(*(*e[10])(int *))[5];
e:函数指针数组,指向函数形参为 int *,返回值为数组指针,该数组元素指向float;