2016-01-29 105 views
0

爲什麼我得到在下面的代碼編譯錯誤?是什麼int (*p)[4]int *p[4]int *(p)[4]之間的區別?C編程。指針數組和指針數組

#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; 
} 
+1

收藏本頁:http://www.cdecl.org/其轉換爲C聲明英語 – Barmar

回答

2

int *p[4]; 

int *(p)[4]; 

之間沒有區別兩者聲明p是的4個指針的陣列。

int x; 
p[0] = &x; 

對兩者均有效。

int (*p)[4]; 

聲明p是一個指針4 int秒的陣列。

你可以在C pointer to array/array of pointers disambiguation得到更多的細節上的差異

之間
int *p[4]; 
int (*p)[4]; 

1
  • int (*p)[4](*p)是4 int =>p指針的陣列到陣列
  • int *p[4] = int * p[4](4 int陣列):p是4 int *
  • int *(p)[4]的數組:相同第二

在你的情況,你應該第二種形式。

1

這是4個指針數組:int *p[4]。所以數組將有4個指針,它們指向int值。這與int *(p)[4]相同。

作爲INT (*p)[4];這是指針4個整數的數組。