C中的(* p)[8]和* p [8]有什么区别?

时间:2011-06-01 13:46:38

标签: c programming-languages

这两个声明如下:

int (*p)[8];
int *p[8];

2 个答案:

答案 0 :(得分:10)

第一个是指向8个整数数组的单个指针,而第二个是指向8个指针的数组,每个指针都是一个整数。

如果你只是提起cdecl,这对于这类事情来说很棒:

pax$ cdecl
Type `help' or `?' for help

cdecl> explain int (*p)[8];
declare p as pointer to array 8 of int

cdecl> explain int *p[8];
declare p as array 8 of pointer to int

cdecl> explain char*(*fp[])(int,float*);
declare fp as array of pointer to function (int, pointer to float)
    returning pointer to char

实际上你可以使用clockwise/spiral rule来做这件事,但我不必担心,因为我发现了cdecl,出于同样的原因我不再转换大的任意32我的头脑中的位数从十进制到十六进制了 - 我可以如果必须的话,但使用工具会更容易: - )

答案 1 :(得分:4)

第一个p是指向8 int数组的指针。 第二个p是一个包含8个指针的数组。