尝试打印 a[1] 的地址时错误:弹出一元'&'操作数时需要左值
while trying to print the address of a[1] error: lvalue required as unary '&' operand pops up
我正在尝试打印 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*
型。
相关文章:
- 控制允许动态运行c++的并发操作数
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- C++ 带有向量的 IF 计算操作数
- 是否所有C++运算符都接受操作数?
- 一元*运算符的操作数是否期望一个 prvalue
- 一元"运算符"未在C++中定义
- 与'operator='不匹配(操作数类型'String'且"void")
- 如何解决一元"*"(有"字符")错误的无效类型参数?
- 不正确的操作数类型 MSVC
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 错误:类型"double()"和"double()"的操作数无效到二进制&quo
- 我的运算符重载是否有效<<(流插入)左操作数不是 ostream
- C++:需要右值作为一元 '&' 操作数
- 在 C++11 中需要右值作为一元'&'操作数
- 尝试打印 a[1] 的地址时错误:弹出一元'&'操作数时需要左值
- 需要作为一元'&'操作数的错误左值
- 作为一元'&'操作数所需的目标C++值
- 错误:传递 std::string 时需要左值作为一元"&"操作数
- C++ 作为一元'&'操作数所需的右值