※ 引述《march20 (澄)》之銘言:
: 呵, 有人問這個問題 :
: int a[10];
: cout << a << endl;
: cout << &a << endl;
: 那麼輸出會是什麼呢?
: 雖然這個問題很無聊,
: 不過這問題大概困擾了不少人吧:)
: 呵, 先賣個關子, 大家想想看吧 :>
呵, 不知道我的解釋對不對...
1. 被宣告成 array 的 "變數?" , 其實是 const * 型別
比如 int a[10],
則 a 的 type 就是 const int *
2. 在 compiler 的角度來看, const type 並無 "意義上" 所屬的 momory,
本質就像 1, 2, 3, 'c', 'd', 'e', 這些常數一樣,
因此, 對這些數作 & 的動作是無意義的
(連 memory 都有有, 怎麼會有 address 呢? )
3. 那麼 &a 會被怎麼 "解釋" 呢?
這裡就是 compiler 動的手腳啦,
compiler 遇到 &a, 會自動解釋成 a
也就是 &a, a 雖然 type 不一樣, 但本質上是指向同一處的
這種現象在 TC 3 則更明顯,
不只 a, &a, &(&a), &(&(&a))), ... etc. 全部都會有同一個值
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: jul.csie.ntu.ed