int *(*a[5])(int, char*); 这句C++语句怎么理解?
ringa_lee
ringa_lee 2017-04-17 13:55:19
0
4
539
ringa_lee
ringa_lee

ringa_lee

Antworte allen(4)
Ty80

你的理解有误

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 *

小葫芦

对于这种问题,采取逐步分解的做法
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个元素,每一个元素都是一个函数指针。

伊谢尔伦

a是一个数组,包含5个元素,每一个元素都是一个指针,指针指向函数,函数接收int,char*两个参数并且返回int*。简单来讲,a就是一个函数指针数组

刘奇

int* (*a[5])(int,char*);

int* (*F)(int, char*)是定义函数指针类型F, 该函数带来两个参数(int, char*), 返回int*;
F a[5]是定义长度为5的数组a,其元素是类型F;

所以实际上是定义了数组a, 长度为5,成员类型为函数指针.

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage