为什么 int **a = &(&val);在 C++ 中导致错误?

问题描述 投票:0回答:1

我正在尝试编写一个 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 一样。

c++ pointers memory-management syntax compiler-errors
1个回答
0
投票

代码的第一个版本失败,因为您尝试获取表达式

&val
的地址,它是一个右值(临时值),并且这里没有 penter 代码永久内存地址。在 C++ 中,您只能获取左值(具有持久内存地址的变量)的地址。

在第二个版本中,您首先将

&val
存储在变量
p
中,这是一个左值,然后您可以获取
p
的地址,这可以正常工作。

因此,要解决此问题,您需要使用变量(如

p
)来保存
val
的地址,然后再尝试获取其地址。

© www.soinside.com 2019 - 2024. All rights reserved.