2010-08-16 131 views
3

可能重複:
Is there any way to find the address of a reference?內存地址

當我們打印實際變量和參考變量的地址,它顯示了相同的地址,爲什麼?

+0

如果你不把它稱爲「參考變量」,它可能不那麼令人困惑。引用不是一個變量,並且沒有自己的地址。 – 2010-08-16 15:34:53

+2

@Mike:命名的引用將被稱爲*變量*在C++ 0x中討論[這裏](http://stackoverflow.com/questions/2908834/why-was-the-definition-of-a-variable -changed-在最最新-C0X-草案)。 – fredoverflow 2010-08-16 15:52:35

回答

6

因爲它們都指向相同的內存位置。這基本上是通過引用是關於。不是傳遞(複製)變量的實際值,而是因爲性能(和內存使用)原因而發送它的地址。

引用行爲有點像指針,但它們更安全,不同於指針。欲瞭解更多信息,請看this page

+0

與你一起,但我的老師說,假設x作爲變量a的別名,那麼x必須有一些內存地址,如01010,也可以有0101,所以兩者如何可以相同 – gurwinder 2010-08-16 15:39:27

+0

在內部,引用實現爲指針 - 所以是的,參考文獻在別的地方。但在語言規則中,x **是** a。我認爲獲取引用的地址在引擎蓋下相當於獲取指針的值(即指針存儲/指向的地址)。 – delnan 2010-08-16 15:48:23

+2

@gurwinder:你的老師不知道他們在說什麼。告訴他他正在承擔一個實現細節,而C++是一種語言,而不是實現。所有這些都是標準所要求的,你不能保證參考*甚至有存儲*。 (參見§8.3.2/ 3:「沒有指定參考是否需要存儲」)所以,通過說「它必須存儲在某個地方」,你的老師是無可辯駁的錯誤;它可能不會。 @delnan:它可能也可能不是,標準不需要任何東西。 – GManNickG 2010-08-16 19:13:29

3

因爲它是參考。這意味着它引用實際變量。

int i = ...; 
int& ri = i; 

在這個例子中,是rii的別名。

10

引用是另一個變量的別名 - 它只是分配給引用的另一個名稱。

編譯器可能會使用指針機制實現它在幕後,但如果有足夠的人知道的事情是混淆和參考的壽命,編譯器可以與

5

這也是一個重要的預留分配知道:

$ 8.3.2/3 - 「沒有指定參考是否需要存儲(3.7)」。

+0

我不明白這個說法嗎?這是什麼意思 ? – 2010-08-20 09:20:10

+3

@StephaneRolland例如,它意味着如果編譯器發現被引用變量的整個生命期都在寄存器中,它永遠不會在被尋址的內存中。 – 2014-02-12 21:41:20