address-of运算符是否返回变量引用的值的地址

Max*_*kyi 1 c c++ memory pointers

我正在阅读关于指针的这一章,它说明如下:

变量的地址可以通过在带有&符号(&)的变量名称前面来获得,称为address-of运算符.例如:

int myvar = 23...;
foo = &myvar;
Run Code Online (Sandbox Code Playgroud)

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

Sto*_*ica 5

没有对象23...,这是一个价值.有一个名为"对象" myvar,它有一个地址.如果为变量赋值,则该地址不会改变,它是变量本身的属性.

int var = 23;
int *foo = &var;
var = 35; // foo isn't changed here, it holds the same address.

*foo = 42; // again, foo itself isn't modified

assert(var == 42); // But we modified var through the address in foo
Run Code Online (Sandbox Code Playgroud)

作为旁注,因为你也标记了这个C++.我只想提一下,整个组合中都有一定的复杂性,因为C++允许你&为自己的类重载运算符(其中).但对于原始变量,使用&将始终产生所述变量的地址.

  • "*C++允许你重载运算符(其中有`&`)*" -​​ 因为这个原因,从`operator&`获得的地址实际上可能不是变量的地址,如果变量的类型决定返回某些东西else(这通常用于智能指针类,如`CComPtr`等).C++ 11添加了`std :: addressof()`来解决这个问题,所以你可以获得变量的实际地址,即使`operator&`过载也是如此. (2认同)