C语言的复杂声明

char *(*p[2])(const char *, const char *)这什么意思啊
2025-06-20 13:14:51
推荐回答(2个)
回答1:

定义了一个函数指针数组
对于这种定义,通法就是先进行运算符优先级/结合性的判断,然后由里向外分析
这里char *(*p[2])(const char *, const char *)

分析后可知等效于
char *(*(p[2]))(const char *, const char *)

然后由里向外分析,首先这里定义/声明的是一个标识符p,
那么p是什么呢?由p[2]可知是一个有两个元素的一维数组,所以p本质是一个数组;
该数组的成员是什么呢?由*(p[2])可知,元素是指针;
指针指向的又是什么呢?由char *(*(p[2]))(const char *, const char *)可知,该指针指向的是一个函数
该函数有两个参数,参数类型都是是const char *,且该函数返回值为char *

所以整理一下上述信息,可知定义/声明了一个函数指针数组p

回答2:

相当于:
class String

const char a[];

const char b[];



string p[][2];

应该是这样。