PHP中文网2017-04-17 13:57:19
你的理解有误
int * (*a[5])(int , char * )
a 是一个长度为5的数组, 数组的每个元素是一个函数指针
函数指针的类型
返回值 是 int * , 带两个参数 int , char *
对于函数指针
B (*A)(int , char * )
括号外的是函数部分, 括号内的是指针部分
对于变量
int *(*a[5]) 其实等同于 int **a[5];
a 是 一个长度为5的数组,数组每个元素是int**
*操作符的结合顺序是从右到左,第二个*要比第一个*先结合,所以要不要括号无所谓
至于表达 指向「长度为5的指针数组」的指针(也就是二维数组中列长度为5的行首指针)?
首先想想 指向 {长度为5的数组} 的指针怎么表达
int (*a)[5];// 此时的括号才有意义,没括号,[] 优于 * 结合
a 是指向数组 ,数组的每个元素 是 int
int* (*a)[5];
a 是指向数组 ,数组的每个元素 是 int *
高洛峰2017-04-17 13:57:19
对于这种问题,采取逐步分解的做法int* (*a[5])(int,char*)
可以看做是int* F(int,char*)
,其中F
等价于(*a[5])
这里F
就是一个返回值类型为int*
,参数类型为(int,char*)
的函数。
也就是说*a[5]
为一个函数,因为运算符优先级的原因,这里可以写作*(a[5])
。
那么就是说a[5]
是一个函数指针,指向类型为int*()(int,char*)
的函数。
所以a
实际上是一个数组,其有5个元素,每一个元素都是一个函数指针。
伊谢尔伦2017-04-17 13:57:19
a
是一个数组,包含5个元素,每一个元素都是一个指针,指针指向函数,函数接收int
,char*
两个参数并且返回int*
。简单来讲,a
就是一个函数指针数组
怪我咯2017-04-17 13:57:19
int* (*a[5])(int,char*);
int* (*F)(int, char*)是定义函数指针类型F, 该函数带来两个参数(int, char*), 返回int*;
F a[5]是定义长度为5的数组a,其元素是类型F;
所以实际上是定义了数组a, 长度为5,成员类型为函数指针.