首页  >  问答  >  正文

int *(*a[5])(int, char*); 这句C++语句怎么理解?

ringa_leeringa_lee2764 天前507

全部回复(4)我来回复

  • PHP中文网

    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 *

    回复
    0
  • 高洛峰

    高洛峰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个元素,每一个元素都是一个函数指针。

    回复
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 13:57:19

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

    回复
    0
  • 怪我咯

    怪我咯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,成员类型为函数指针.

    回复
    0
  • 取消回复