尝试打印 a[1] 的地址时错误:弹出一元'&'操作数时需要左值

while trying to print the address of a[1] error: lvalue required as unary '&' operand pops up

本文关键字:一元 操作数 打印 错误 地址      更新时间:2023-10-16

我正在尝试打印 a[1] 元素的地址。我知道它可以通过

cout << a[i];

但我只想知道为什么当我这样做时我会收到错误消息

cout << &(a+1);

#include <iostream>
using namespace std;
int main()
{
    int array[10];
    array[1]=3;
    cout<<"Address : "<<&(array+1);
    return 0;
}

对于任何数组或指针a和索引i,表达式 a[i]等于 *(a + i) 。由此我们可以得出结论,a + i是一个等于&a[i]的指针。

因此,当你尝试做&(a + 1)这实际上等于&&a[1]这毫无意义并给你一个错误。

非正式地说,array + 1不是作为变量存在的(例如,您不能将其设置为另一个值),因此您不能获取它的地址。更正式地需要一个左值;即可以设置为值的东西。

因此,&(array + 1)会发出编译错误:在您的情况下,有一些有用的提示。

您是否只想对指针算术中超出array地址进行array + 1?在array + 1的评估中,array衰减int*型。