地址运算符是否返回变量引用的对象的地址
Does address-of operator return address of an object referenced by the variable
这是与这个问题不同的问题,因为这里我使用的是对象类型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!
忽略此处的不良内存管理,您会发现您只有一个引用,它是内存位置的副本。如果更改原始指针,它不会更改。这能回答你的问题吗?
相关文章:
- 空基优化子对象的地址
- 被解释为低级别const的const对象的地址
- 将地址分配给本地指针后,公共对象的变量将消失
- 如何在C++中获取该对象的类声明中对象的地址?
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 已转换对象的地址
- 在什么情况下,两个堆栈分配的结构对象的 this 点指向同一个地址?
- 如何从绝对地址的 C 样式指针创建对C++对象的引用
- 是否通过向封闭对象的地址添加字节偏移量来访问子对象
- C++ - 非静态 void* 成员,指向具有相同地址但不同值的不同对象的另一个非静态成员
- 为什么按值返回的对象与方法中的对象具有相同的地址?
- 这个指针指向给定的对象还是给定对象的地址
- 对象地址是否保证是其类型对齐的倍数
- C++多态性:有没有办法找到对象成员函数的地址?
- 如何在 c++ 中操作当前对象的地址?
- static_casting基对象的地址到派生类的指针
- 如果我有指向基类对象的指针,如何获取虚拟方法的地址?
- 更改保留指向其字段的原始指针的对象地址
- 在 std::map 中插入对象时构造函数中变量的地址
- C++:获取包含成员子对象的完整对象的地址