我正在尝试编写一个 C++ 代码来给出指针的地址,该指针本身就是一个指针。这是我所拥有的:
int val = 10;
int **a = &(&val);
我收到错误了
lvalue required as unary '&' operand
int **a = &(&val);
当我使用以下代码时,我得到了正确的输出:
int val = 10;
int *p = &val;
int **a = &p;
有人可以解释为什么第一个版本不正确吗?
我尝试使用&(&val)直接获取val的地址。我希望这能给我一个指向指针的指针,就像在第二个示例中使用 &p 一样。
代码的第一个版本失败,因为您尝试获取表达式
&val
的地址,它是一个右值(临时值),并且这里没有 penter 代码永久内存地址。在 C++ 中,您只能获取左值(具有持久内存地址的变量)的地址。
在第二个版本中,您首先将
&val
存储在变量 p
中,这是一个左值,然后您可以获取 p
的地址,这可以正常工作。
因此,要解决此问题,您需要使用变量(如
p
)来保存 val
的地址,然后再尝试获取其地址。