int t[10];int * u = t;cout << t << " " << &t << endl;cout << u << " " << &u << endl;輸出:0045FB88 0045FB880045FB88 0045FB7C輸出對于u是有意義的。我理解t并且&t[0]應該具有相同的值,但是為什么&t也相同?&t實際上是什么意思?
3 回答

眼眸繁星
TA貢獻1873條經驗 獲得超9個贊
當t
在表達式中單獨使用它時,將進行數組到指針的轉換,這將產生一個指向數組第一個元素的指針。
當t
用作&
運算符的參數時,不會進行這種轉換。所述&
然后明確地需要的地址t
(陣列)。&t
是指向整個數組的指針。
數組的第一個元素在內存中的位置與整個數組的開頭相同,因此這兩個指針具有相同的值。

小唯快跑啊
TA貢獻1863條經驗 獲得超2個贊
t
由于您無法更改,因此沒有名為的變量。該名稱t
僅指第一個元素的地址(并且還具有與之關聯的大?。?。因此,采用該地址的地址實際上是沒有意義的,并且C將其“折疊”為僅僅是地址。
對于函數情況,也會發生同樣的事情:
int foo(void){ return 12;}printf("%p and %p\n", (void *) foo, (void *) &foo);
這應該打印出相同的內容,因為沒有保存地址的變量foo
,而該地址又可以采用。
添加回答
舉報
0/150
提交
取消