2012-10-17 110 views
2
int b[3][2] = { {0, 1}, {2, 3}, {4, 5} }; 
int (*bpp)[2] = b; 
int *bp = b[0]; 

在上面的代碼:是*bpp指針二維數組?或者是一個長度爲2的指針數組?爲什麼用括號包圍*bpp?有*bpp[2](*bpp)[2]之間的差異?C中的指針數組?

同時,在下面的代碼:(改變所述陣列的尺寸)

int i[4] = { 1, 2, 3, 4 }; 
int (*ap)[2] = (int(*)[2])i; 

第二行是非常混亂對我來說,尤其是類型轉換(int(*)[2]),什麼數據類型是它恰好投射到?

謝謝^^

回答

3

bpp是一個指針,指向兩個int陣列。 *bpp是兩個int的數組。 int *bpp[2]將宣佈bpp作爲兩個指針的數組int(此括號使它是指向兩個int陣列)。

(int(*)[2])是一個指向兩個int的數組的指針。

dereference (so bpp is a pointer) 
    | 
    v 
int (*bpp)[2] 
^  ^
|   | 
| array index (so the thing that bpp points to is an array) 
| 
the thing on the left is the final type... here it is int, 
so the array is an array of int 

這些可以通過考慮「聲明如下方式使用」的規則被讀取(帶運算符優先級的知識相結合)