设T=(*a[5])
int *T(int, char*)
表明和函数指针相关,返回类型是int *T=int *(*a[5])
表示返回类型是指向「长度为5的指针数组」的指针(也就是二维数组中列长度为5的行首指针)?
设T=(*a[5])
int *T(int, char*)
表明和函数指针相关,返回类型是int *T=int *(*a[5])
表示返回类型是指向「长度为5的指针数组」的指针(也就是二维数组中列长度为5的行首指针)?
对于这种问题,采取逐步分解的做法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个元素,每一个元素都是一个函数指针。
int* (*a[5])(int,char*);
int* (*F)(int, char*)是定义函数指针类型F, 该函数带来两个参数(int, char*), 返回int*;
F a[5]是定义长度为5的数组a,其元素是类型F;
所以实际上是定义了数组a, 长度为5,成员类型为函数指针.
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.5k 阅读
3 回答469 阅读✓ 已解决
你的理解有误
对于函数指针
对于变量
a 是 一个长度为5的数组,数组每个元素是int**
*操作符的结合顺序是从右到左,第二个*要比第一个*先结合,所以要不要括号无所谓
至于表达 指向「长度为5的指针数组」的指针(也就是二维数组中列长度为5的行首指针)?
首先想想 指向 {长度为5的数组} 的指针怎么表达
a 是指向数组 ,数组的每个元素 是 int
a 是指向数组 ,数组的每个元素 是 int *