代码之家  ›  专栏  ›  技术社区  ›  akhil

为什么int**a=&(&val);导致C++错误?[副本]

  •  1
  • akhil  · 技术社区  · 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)。我希望这能给我一个指向指针的指针,就像使用&p在第二个例子中起作用。

    1 回复  |  直到 1 年前
        1
  •  3
  •   Dúthomhas Rishu    1 年前

    代码的第一个版本失败,因为您试图获取表达式的地址 &val ,它是一个右值(临时值),不具有永久存储器地址。在C++中,您只能获取左值(具有持久内存地址的变量)的地址。

    在第二个版本中,您可以存储 &瓦尔 在变量中 p 首先,它是一个左值,然后您可以获取以下地址 p ,工作正常。

    因此,为了解决这个问题,你需要使用一个变量(比如 p )持有以下地址 val 在尝试获取其地址之前。