2012-10-17 153 views
3

我知道在C++中,數組的名稱只是指向數組的第一個元素的指針。例如:C++指向數組的指針

int foo[5]; 

=>FOO是int類型的指針,它指向的數組中的第一個元素,這是一個[0]

但是,我們有這樣的:

int (*foo)[5] 

這裏,FOO是指向類型的陣列。那麼foo一個指針(int類型)的指針?

+2

不,它是一個指向數組的指針。數組不是指針。 – chris

+2

你知道它錯了。 –

+0

這必須是一個騙局,對吧? –

回答

2

在C++中,數組的名稱只是指向數組的第一個元素的指針

這不是正確的:一個陣列的名稱可以是轉換到對應的指針型「免費」,但它肯定是不的指針。你可以告訴最簡單的方法是和一個數組的指針的比較大小:

int foo[5]; 
int *ptr; 
cout << sizeof(foo) << endl; 
cout << sizeof(ptr) << endl; 

你的第二個例子是一個指向int的規模5.

cout << sizeof(foo) << endl; 
cout << sizeof(*foo) << endl; 

陣列在如預期的那樣,32位環境this prints420

+0

所以在第二種情況下,如果它是一個指向數組的指針,那麼指針的類型是什麼?它只是「數組」嗎? – Chin

+0

@Chin它的類型是「指向5號整數數組的指針」(很長的名字,嗯?)。 – dasblinkenlight

+0

@Chin看看[ideone的這個鏈接](http://ideone.com/p48h4),它說明了我上次評論的重點。 – dasblinkenlight

5

這是五個整數的數組:

int a[5]; 

這是一個指向五個整數的數組:

int (*p)[5] = &a; 

這是一個指向一個int:

int * q = a; // same as &a[0]