2017-04-06 159 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! 

这里忽略坏的内存管理,你看,你只是有一个参考,这是一个复制到存储位置。如果更改原始指针,则不会更改。这是否回答你的问题?