看板 b94902xxx 關於我們 聯絡資訊
※ 引述《ericsk (認真的艾瑞克)》之銘言: : 而在 C 語言裡,陣列的名稱用來表示陣列第一個元素的位址,所以在這 : 個例子中, a 的值是 0x20 ,資料型態是 int *。為什麼是 int * 呢? : 因為它表示的是第一個元素 a[0] 的位址, a[0] 的資料型態是 int , : 那麼指到 a[0] 位址的變數,自然資料型態是 int * 囉。 這邊的說法不完全正確喔. 嚴格說起來, int [] 跟 int * const 是不一樣的型態. 你可以做這樣的實驗: #include <cstdio> int main(){ int a[20]; printf ("%d %d %d\n", sizeof(a), sizeof(*&a), sizeof(&*a)); return 0; } 結果會是 80 80 4(在 GCC, Linux, IA-32 下), 看出差別在哪裡了嗎? 此外, 如果是照 int * const 的邏輯, 那麼這樣的程式碼: int a[20]; int (*b)[20] = &a; 該如何解釋呢? 很顯然 int (*)[20] 是沒辦法接受 int * const * 的吧? 因此, 這樣推理下來唯一合理的解釋就是, int [] 跟 int * const 是不一樣的, 只是用在 expression, 需要的時候, 會被 implicit cast 成 int * 而已. -- その乾いた哀愁の瞳に去來するものは何か? 失ったもの 得たもの そして廣大なネットの狹間で彼が見たものとは? 虛像と實存と記號の中に彼は今、何を想うのか? <バトルプログラマーシラセ> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.224.64
wens:強者來補充了 11/03 23:36
ericsk:肯定的....只是我已經沒辦法解釋那麼多了....:p 11/03 23:52