地址运算符是否返回变量引用的对象的地址

Does address-of operator return address of an object referenced by the variable

本文关键字:地址 对象 引用 返回 运算符 是否 变量      更新时间:2023-10-16

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

我正在阅读有关指针的这一章,它陈述了以下内容:

变量的地址可以通过在 带有与号 (&( 的变量,称为地址运算符。为 例:

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

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

根据你之前的问题:,它不是...它是变量myvar的地址...

编辑

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

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

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

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

不,它是变量myvar的地址,变量是使用 new Struct(); 返回的对象初始化的。

你得到的基本上是指针的副本。以下是您可以证明它的方法:

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!

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