內存地址
回答
因爲它們都指向相同的內存位置。這基本上是通過引用是關於。不是傳遞(複製)變量的實際值,而是因爲性能(和內存使用)原因而發送它的地址。
引用行爲有點像指針,但它們更安全,不同於指針。欲瞭解更多信息,請看this page。
與你一起,但我的老師說,假設x作爲變量a的別名,那麼x必須有一些內存地址,如01010,也可以有0101,所以兩者如何可以相同 – gurwinder 2010-08-16 15:39:27
在內部,引用實現爲指針 - 所以是的,參考文獻在別的地方。但在語言規則中,x **是** a。我認爲獲取引用的地址在引擎蓋下相當於獲取指針的值(即指針存儲/指向的地址)。 – delnan 2010-08-16 15:48:23
@gurwinder:你的老師不知道他們在說什麼。告訴他他正在承擔一個實現細節,而C++是一種語言,而不是實現。所有這些都是標準所要求的,你不能保證參考*甚至有存儲*。 (參見§8.3.2/ 3:「沒有指定參考是否需要存儲」)所以,通過說「它必須存儲在某個地方」,你的老師是無可辯駁的錯誤;它可能不會。 @delnan:它可能也可能不是,標準不需要任何東西。 – GManNickG 2010-08-16 19:13:29
因爲它是參考。這意味着它引用實際變量。
int i = ...;
int& ri = i;
在這個例子中,是ri
像i
的別名。
引用是另一個變量的別名 - 它只是分配給引用的另一個名稱。
編譯器可能會使用指針機制實現它在幕後,但如果有足夠的人知道的事情是混淆和參考的壽命,編譯器可以與
這也是一個重要的預留分配知道:
$ 8.3.2/3 - 「沒有指定參考是否需要存儲(3.7)」。
我不明白這個說法嗎?這是什麼意思 ? – 2010-08-20 09:20:10
@StephaneRolland例如,它意味着如果編譯器發現被引用變量的整個生命期都在寄存器中,它永遠不會在被尋址的內存中。 – 2014-02-12 21:41:20
- 1. C++內存地址?
- 2. 機器內存地址的內存地址? (C語言)
- 3. C++內存地址增量
- 4. 文字的內存地址
- 5. 變量的內存地址
- 6. C內存地址問題
- 7. 比較內存地址
- 8. NSNotificationCenter,打印內存地址
- 9. 構建從內存地址
- 10. 視頻內存地址
- 11. 保留的內存地址?
- 12. 轉換內存地址
- 13. 瞭解內存地址
- 14. NSArray的內存地址
- 15. 更改內存地址*
- 16. 從內存地址代碼
- 17. LAMBDA返回內存地址
- 18. 指針內存地址
- 19. VA和內存地址
- 20. 函數內存地址(ASM)
- 21. 打印內存地址
- 22. tbb - concurrent_vector地址到內存?
- 23. 內存地址和偏移
- 24. 內存地址對齊
- 25. 隨機內存地址
- 26. 變量內存地址
- 27. 打印內存地址
- 28. 位的內存地址
- 29. 訪問內存地址的內容C
- 30. 讀取內存地址內容
如果你不把它稱爲「參考變量」,它可能不那麼令人困惑。引用不是一個變量,並且沒有自己的地址。 – 2010-08-16 15:34:53
@Mike:命名的引用將被稱爲*變量*在C++ 0x中討論[這裏](http://stackoverflow.com/questions/2908834/why-was-the-definition-of-a-variable -changed-在最最新-C0X-草案)。 – fredoverflow 2010-08-16 15:52:35