C指针的声明混乱

问题描述 投票:-1回答:1

C中这两个声明有什么区别?

  1. int (*p)(char (*a)[]);
  2. int *p(char (*a)[]);
c
1个回答
1
投票

对于int (*p)(char (*a)[]);

  • (*p)(char (*a)[])是一个int
  • 所以(*p)是一个函数返回一个int并采用类型为char (*a)[]的参数。 (关于后者的更多内容。)
  • 所以*p是同样的功能。
  • 所以p是指向该函数的指针。
  • char (*a)[](*a)[]是一个char
  • 所以(*a)是一系列char,大小不明。
  • 所以*a就是那个阵列。
  • 所以a是一个指向未知大小的char数组的指针。
  • 所以p是一个返回int的函数的指针,它接受一个参数,该参数是一个指向未知大小的char数组的指针。

对于int *p(char (*a)[]);

  • *p(char (*a)[])是一个int
  • 所以p(char (*a)[])是指向int的指针。
  • 所以p是一个返回指向int的指针并采用char (*a)[]类型参数的函数。
  • 从上面,我们知道参数是指向未知大小的char数组的指针。
  • 所以p是一个函数,它返回一个指向int的指针,并获取一个参数,该参数是一个指向未知大小的char数组的指针。
© www.soinside.com 2019 - 2024. All rights reserved.