user-0 提问: c语言指针复杂定义

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-2
content: 引用 4 楼 脚味 的回复:[quote=引用 2 楼 自信男孩 的回复：]char *func（int **p 这个是函数变量；  可以用a[0] = func;这样赋值；也可以a[0] = &func;  调用可以用a[0](p); 例子如下：  #include <stdio.h>  char *func(int **a);  int main(void) {     int **p = NULL;     char *(*a[3])(int **);      //两种写法一样的     //a[0] = func;     a[0] = &func;      a[0](p);      return 0; }  char *func(int **a) {     printf("%p\n", a);      printf("helloworld!\n");     return NULL; }  因为func函数名就是地址名，加不加&都是可以的。不是很懂，char *func （int **a）意思是这个函数参数是int 二级指针，返回的是char类型指针对吗？ [/quote]  函数名前面的是返回值类型，char * func(int **a);char *是返回值类型；

user: user-3
content: 仅供参考：//char (*(*x[3])())[5];//x是什么类型的变量? // //分析C语言声明，关键是搞清楚这个变量是个什么东西（函数、指针、数组）， //是函数那么剩下的就是他的参数和返回值， //是指针那剩下部分是说明他指向什么， //是数组剩下的部分就是说明数组的成员是什么类型。 //解析C语言声明规则： //从左侧第一个标识符开始，按照优先级进行结合。*表示是..的指针，const表示只读的，volatile表示可变的，[]表示是数组，()表示是函数。 // //x和[3]结合说明是一个大小为3的数组，该数组的每个元素为一类指针，该类指针指向一类函数，该类函数无参数，返回一类指针，该类指针指向一个大小为5的char型数组 #include <stdio.h> #include <typeinfo.h> char num[5]; char (*x00())[5] {     return # } int main() {     char (*(*x[3])())[5];//是个数组，大小为3     char (*(*x0  )())[5];//数组的元素，是个函数指针     char (*( x00 )())[5];//函数原型，参数为空，返回值为指针     char (*  x000   )[5];//返回值      x0 = x00;     x[0] = x0;     x[1] = x0;     x[2] = x0;     printf("typeid(x).name() is %s\n",typeid(x).name());     return 0; } //typeid(x).name() is char (* (__cdecl**)(void))[5]

user: user-4

user: user-0
content: 引用 5 楼 真相重于对错 的回复：#include <stdio.h> char* f1(int**){     printf("%s", __FUNCTION__);     return nullptr; } char* f2(int**){     printf("%s", __FUNCTION__);     return nullptr; } char* f3(int** ){     printf("%s", __FUNCTION__);      return nullptr; } char* (*a[3])(int** p) {f1,f2,f3};  int main(){     a[0](nullptr);     a[1](nullptr);     a[2](nullptr);          }老师可以不传入空参数吗？来个稍微复杂的

user: user-0
content: 是不是char *func（int **p）这个函数接受一个类型是int的二级指针然后返回一个值是char类型的指针，这样理解对吗

user: user-5
content: #include <stdio.h> char* f1(int**){     printf("%s", __FUNCTION__);     return nullptr; } char* f2(int**){     printf("%s", __FUNCTION__);     return nullptr; } char* f3(int** ){     printf("%s", __FUNCTION__);      return nullptr; } char* (*a[3])(int** p) {f1,f2,f3};  int main(){     a[0](nullptr);     a[1](nullptr);     a[2](nullptr);          }

user: user-0
content: 引用 2 楼 自信男孩 的回复：char *func（int **p 这个是函数变量；  可以用a[0] = func;这样赋值；也可以a[0] = &func;  调用可以用a[0](p); 例子如下：  #include <stdio.h>  char *func(int **a);  int main(void) {     int **p = NULL;     char *(*a[3])(int **);      //两种写法一样的     //a[0] = func;     a[0] = &func;      a[0](p);      return 0; }  char *func(int **a) {     printf("%p\n", a);      printf("helloworld!\n");     return NULL; }  因为func函数名就是地址名，加不加&都是可以的。不是很懂，char *func （int **a）意思是这个函数参数是int 二级指针，返回的是char类型指针对吗？

user: user-0
content: 引用 1 楼 真相重于对错 的回复：char *(*a[3])(int **p) 代表是一个3个元素的数组，其中的元素类型是 char* func(int**)  这就是一个函数，这个函数的返回值是char* 参数是int**意思是数组里面三个元素都是返回类型是char 指针的函数这个函数的参数是int的二级指针。对吗？老师

user: user-2
content: char *func（int **p 这个是函数变量；  可以用a[0] = func;这样赋值；也可以a[0] = &func;  调用可以用a[0](p); 例子如下：  #include <stdio.h>  char *func(int **a);  int main(void) {     int **p = NULL;     char *(*a[3])(int **);      //两种写法一样的     //a[0] = func;     a[0] = &func;      a[0](p);      return 0; }  char *func(int **a) {     printf("%p\n", a);      printf("helloworld!\n");     return NULL; }  因为func函数名就是地址名，加不加&都是可以的。

user: user-5
content: char *(*a[3])(int **p) 代表是一个3个元素的数组，其中的元素类型是 char* func(int**)  这就是一个函数，这个函数的返回值是char* 参数是int**