C编程。指针数组和指向数组的指针

时间:2016-01-29 17:28:13

标签: c arrays pointers

为什么我在下面的代码中编译错误? 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;
}

3 个答案:

答案 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];

C pointer to array/array of pointers disambiguation

答案 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个整数数组的指针。