int *( *( *arr[5])())();
float ( * ( *b()) [] )();
void * ( *c) ( char, int (*)());
void ** (*d) (int &, char **(*)(char *, char **));
float ( * ( * e[10]) (int &) ) [5];
上一篇我们分析过这些声明表示什么意思,今天我们初始化下这些声明
int *( *( *arr[5])())();
1、看下最外面一层是一个函数,没有参数,函数返回一个int*类型的指针
int a=1;
int* f1(){
return &a;
}
2、往里面看还是一个函数,返回一个指针,指向外面的函数
int *(*f2())(){
return &f1;
}
3、再往里看是是一个数组,每一个元素都是指针,指向外面的函数
int *( *( *arr[5])())() = {&f2};
float ( * ( *b()) [] )();
1、看最外面是一个返回float的函数
float f1(){
return 1;
}
2、再往里面看是一个指针数组,其中的每个指针指向外面的函数
float (*arr[])()={&f1}
3、再往里面看是一个函数,函数返回一个指针,指向外面的数组
float ( * ( *b()) [] )(){
return &arr;
}
void * ( *c) ( char, int (*)());
1、看最外面是一个函数,函数返回一个void *类型,函数有两个参数
void * f(char p1,int (*p2)()){
reurn (void*)1;
}
2、看里面是一个指针,指向外面的函数
void * ( *c) ( char, int (*)())=&f;
void ** (*d) (int &, char **(*)(char *, char **));
1、看最外面是一个函数,函数有连个参数,函数返回的是一个void **类型的数据
void* a=(void*)1;
void ** f1(int &, char **(*)(char *, char **)){
return &a;
}
2、里面是一个指针,指向外面的函数
void ** (*d) (int &, char **(*)(char *, char **)) = &f1;
float ( * ( * e[10]) (int &) ) [5];
1、看最外面是一个数组,数组的没一个元素都是float类型
float arr[5]={1};
2、里面看是一个函数,该函数返回一个指针,指针指向外面的数组
float (*f1(int &))[5]{
return &arr;
}
3、再往里面看是一个数组,数组的每一个元素是指针,指针指向外面的函数
float ( * ( * e[10]) (int &) ) [5] ={&f1};