如何将包含运算符返回地址的指针赋值给指针变量?

How does the pointer containing an address returned by address of operator assigned to a pointer variable?

我理解我们不能直接将地址字面量分配给指针变量,因此运算符 (&) 的地址不会 return variable/operand 的地址作为字面量.

 int* ptr{ 0x7ffd78ad698c };  // Compiler error

相反,它 return 是一个包含 variable/operand 地址的指针,然后我们的指针变量以某种方式设法仅从包含地址 returned 的指针中获取地址通过 operator(&) 的地址。

指针变量如何只从包含地址 return 运算符(&)的地址的指针中获取地址?指针 return 由运算符(&)的地址编辑的 lifetime/scope 是什么?指针变量取到它包含的地址后是否立即销毁?

您似乎对指针感到困惑。

首先,只有你做不到的原因

int* ptr{ 0x7ffd78ad698c }; // Compiler error

是因为编译器认为它很傻而且是个错误。如果你加上强制转换,编译器绝对会让你这样做。

int* ptr{ (int*)0x7ffd78ad698c }; // Compiles

(我还要指出,大多数人会使用 = 来编写此语句)

其次。指针没有生命周期。好吧,ptr 是一个变量,所以它有生命周期,但是存储在 ptr 中的地址 没有生命周期。它指向的是一个有生命周期的变量。但是地址本身 - 数字 0x7ffd78ad698c - 没有生命周期。您的问题:“& 返回的指针的 lifetime/scope 是什么?”就像问“+ 返回的数字的 lifetime/scope 是多少?”

请注意,当人们说“指针”时,有时他们指的是指针变量(它有一个 lifetime/scope 因为它是一个变量),有时他们指的是一个地址(不是因为它不是) .

address literal

C++ 中没有地址文字这样的东西。

0x7ffd78ad698c

这是一个整数文字。

What is the lifetime/scope of the pointer returned by address of operator(&)?

假设它应用于指针,结果是纯右值。

重载 operator& 会导致任何重载函数 returns。重载一元 operator& 非常罕见。