错误:左值需要作为一元'&'操作数

时间:2021-03-07 09:27:22

标签: c++

// Online C++ compiler

int main() {
    int a[3]={9,8,7} ;
    std::cout << &(a+1) <<"___" <<&(a[1]);

    return 0;
}

为什么我无法获取地址值。显示错误。

1 个答案:

答案 0 :(得分:1)

您正在尝试检索右值的指针,即计算结果 (a+1)。 rvalue 被定义为没有地址的任何东西,因此它可以在计算期间存储在注册表中的某处。这就像说 &1,但当然 1 没有指针。 & 操作数因此只能用于左值,即存储在某个内存地址的值。

在您的情况下,a 已经对应于指向 a[0] 的指针,因此为了打印指向 a[1] 的指针,您实际上只需要:

std::cout << a + 1 << std::endl;

指针算法会将地址增加x * sizeof(T),并且由于aint的数组,因此它将a[0]的地址值增加{{1} },因此sizeof(int)

相关问题