2017-07-17 91 views
5

這兩個在C中有什麼區別?第一個是指針數組。 我的主要困惑是關於第二個聲明。它聲明瞭什麼。這兩個不一樣嗎?int(* ar)[]聲明在C中意味着什麼?

int *p []={&i,&j,&k}; 

int (*ar) []; 
+0

Sorry.Edited了這一點。謝謝。 – Neer

+2

[「將p聲明爲指向int的指針]](https://cdecl.org/?q=int+*p+%5B%5D),[」將ar聲明爲指向int數組的指針「](https:/ /cdecl.org/?q=int+%28*ar%29+%5B%5D) – kay

+0

看看[這個答案](https://stackoverflow.com/a/30345939/4265352)上的類似問題。 – axiac

回答

4

兩者並不相同。第二個是指向int數組的指針。

將2D數組作爲參數傳遞時,可以將此類聲明用作函數參數。例如,給定這樣的功能:

void f(int (*ar)[5]) // array size required here to do pointer arithmetic for 2D array 
{ 
    ... 
} 

你可以這樣調用它:

int a[5][5]; 
f(a); 

另一個例子爲本地參數:

int a[5] = { 1,2,3,4,5 }; 
int (*ar)[]; // array size not required here since we point to a 1D array 
int i; 

ar = &a; 
for (i=0;i<5;i++) { 
    printf("a[%d]=%d\n", i, (*ar)[i]); 
} 

輸出:

a[0]=1 
a[1]=2 
a[2]=3 
a[3]=4 
a[4]=5 
+0

非常感謝,他們可以在函數中聲明和使用嗎(不在參數中)?如果不是那麼爲什麼有一個範圍可以在函數內部聲明這樣的東西。 – Neer

+0

@尼爾是的,他們可以。查看我的編輯例子。 – dbush

6

只需按照"right-left" rule

int *p []={&i,&j,&k}; //讀取: 「p是一個指針數組爲int」

int (*ar) []; // 「AR是一個指向整數數組」