我知道在C++中,數組的名稱只是指向數組的第一個元素的指針。例如:C++指向數組的指針
int foo[5];
=>FOO是int類型的指針,它指向的數組中的第一個元素,這是一個[0]
但是,我們有這樣的:
int (*foo)[5]
這裏,FOO是指向類型的陣列。那麼foo一個指針(int類型)的指針?
我知道在C++中,數組的名稱只是指向數組的第一個元素的指針。例如:C++指向數組的指針
int foo[5];
=>FOO是int類型的指針,它指向的數組中的第一個元素,這是一個[0]
但是,我們有這樣的:
int (*foo)[5]
這裏,FOO是指向類型的陣列。那麼foo一個指針(int類型)的指針?
在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 prints4
和20
。
所以在第二種情況下,如果它是一個指向數組的指針,那麼指針的類型是什麼?它只是「數組」嗎? – Chin
@Chin它的類型是「指向5號整數數組的指針」(很長的名字,嗯?)。 – dasblinkenlight
@Chin看看[ideone的這個鏈接](http://ideone.com/p48h4),它說明了我上次評論的重點。 – dasblinkenlight
這是五個整數的數組:
int a[5];
這是一個指向五個整數的數組:
int (*p)[5] = &a;
這是一個指向一個int:
int * q = a; // same as &a[0]
不,它是一個指向數組的指針。數組不是指針。 – chris
你知道它錯了。 –
這必須是一個騙局,對吧? –