C中这两个声明有什么区别?
int (*p)(char (*a)[]);
int *p(char (*a)[]);
对于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
数组的指针。