为什么我在下面的代码中编译错误? int (*p)[4]
,int *p[4]
和int *(p)[4]
之间有什么区别?
#include <stdio.h>
int main(){
int (*p)[4];// what is the difference between int (*p)[4],int *p[4], and int *(p)[4]
int x=0;
int y=1;
int z=2;
p[0]=&x;
p[1]=&y;
p[2]=&z;
for(int i=0;i<3;++i){
printf("%i\n",*p[i]);
}
return 0;
}
答案 0 :(得分:2)
之间没有区别
int *p[4];
和
int *(p)[4];
两者都声明p
是一个包含4个指针的数组。
int x;
p[0] = &x;
对两者都有效。
int (*p)[4];
声明p
是指向4 int
s数组的指针。
您可以获得有关
之间差异的更多详细信息int *p[4];
int (*p)[4];
答案 1 :(得分:1)
int (*p)[4]
:(*p)
是一个包含4 int
=&gt;的数组p
指向数组的指针(数组为4 int
)int *p[4]
= int * p[4]
:p
是一个包含4 int *
int *(p)[4]
:与第二个在你的情况下,你应该是第二种形式。
答案 2 :(得分:1)
这是4个指针的数组:int *p[4]
。所以数组将有4个指针,它们指向int值。这与int *(p)[4]
相同。
对于int (*p)[4];
,这是指向4个整数数组的指针。