作者Freak1033 (金が信念! XD)
看板b94902xxx
標題Re: [秘技] 使徒七同步秘技 (1)
時間Thu Nov 3 23:33:14 2005
※ 引述《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