2017-04-06 79 views
-1

這是與this one不同的問題,因爲我在這裏使用的對象類型爲struct,而不是值23...由變量引用的對象的地址 - 運算符返回地址

我讀指針上this chapter和它指出以下:

變量的地址可以由 變量的名稱與符號標誌(&),稱爲地址前述獲得的操作員。對於 例如:

MyStruct* myvar = new MyStruct(); 
&myvar; // what is this address? 

我的理解是正確的,它是一個對象new MyStruct(),不是變量本身的地址?我還沒有很好地理解變量(不是它們引用的對象)是如何存儲的,而且在編譯程序時很可能根本沒有使用它們。

+0

你試過編譯這個嗎? –

+2

'MyStruct myvar = new Struct();'是無效的C++。你可能打算寫'MyStruct * myvar = new MyStruct();'在這種情況下'foo = &myvar;'沒有任何意義。請解決你的問題,它不能被回答。 – Lundin

+3

使用[這些]之一替換cplusplus.com(http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – molbdnilo

回答

4

根據你previous question沒有,它不是......它是可變myvar的地址...

編輯

這樣新的結構的實際字節()存儲在與變量不同的地址下?

new其中分配了struct的「字節」的存儲器的返回地址。 價值myvar將是其中「字節」被放置在存儲器中的地址,並且是&myvar其中可變myvar被放置在存儲器中的地址。

------------------------------------------------------- 
|      M E M O R Y      | 
------------------------------------------------------- 
| --------------     --------------- | 
| | myvar = 234| ----points to---> | new MyStruct| | 
| --------------     --------------- | 
| ^       ^    | 
| |        |    | 
| address 1 (&myvar)    address 234  | 
|              | 
------------------------------------------------------- 
+0

謝謝,所以'新的Struct()'的實際字節存儲在不同的地址比變量? –

+0

結構的「mytes」被分配的內存的'new'返回地址。因此,myvar的值將是「字節」被放置在內存中的地址,並且&myvar是地址變量變量myvar被放置在內存中。 – LPs

+0

是的,我知道,所以假設它返回了'234',那是'new Struct()'創建的對象的第一個字節的地址,我的問題基本上是'&myvar'返回'234'或其他地址? –

2

我的理解是正確的,它是對象的地址new MyStruct(),而不是變量本身?

不,它可變myvar的這是地址初始化與由new Struct();返回的對象。

+0

謝謝,所以'新的Struct()'的實際字節存儲在不同的地址比變量? –

+0

爲了編譯這個代碼,'myvar'必須是一個指針。所以這個問題不能回答,因爲它沒有任何意義。 – Lundin

+0

@Maximus不,myvar指向地址位置的開始,就是這樣。 'myvar'是myvar本身所在的位置。 –

1

你得到的是基本指針的副本。下面是如何you can prove it

int* ptr = new int(2); 
int& i = *ptr; 
std::cout<<i<<std::endl; //prints 2 
ptr = new int(3); //now ptr points to another address 
std::cout<<*ptr<<std::endl; //prints 3 
std::cout<<i<<std::endl; //still prints 2! 

這裏忽略壞的內存管理,你看,你只是有一個參考,這是一個複製到存儲位置。如果更改原始指針,則不會更改。這是否回答你的問題?