address-of运算符是否返回由变量

时间:2017-04-06 06:57:15

标签: c++ addressof

这是与this one不同的问题,因为我在这里使用对象类型struct,而不是值23...

我在指针上阅读this chapter,它说明了以下内容:

  

变量的地址可以通过在a的名称前面获得   带有&符号(&)的变量,称为地址运算符。对于   例如:

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

我的理解是否正确,它是对象new MyStruct()的地址,而不是变量本身?我还没有很好地理解变量(不是它们引用的对象)是如何存储的,并且很可能在编译程序时根本不使用它们。

3 个答案:

答案 0 :(得分:4)

根据您的previous question,它不是......它是变量myvar的地址......

修改

  

所以新的Struct()的实际字节存储在与变量不同的地址下?

new返回内存的地址,其中" bytes" struct的分配。 myvar的值将是" bytes"的地址。放在内存中,&myvar是变量myvar放在内存中的地址。

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

答案 1 :(得分:2)

  

我的理解是否正确,它是对象new MyStruct()的地址,而不是变量本身?

不, <{1}}的地址,已初始化myvar返回的对象。

答案 2 :(得分: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!

在此处忽略错误的内存管理,您会看到只有一个引用,它是内存位置的副本。如果更改原始指针,则不会更改。这会回答你的问题吗?