// Online C++ compiler
int main() {
int a[3]={9,8,7} ;
std::cout << &(a+1) <<"___" <<&(a[1]);
return 0;
}
为什么我无法获取地址值。显示错误。
答案 0 :(得分:1)
您正在尝试检索右值的指针,即计算结果 (a+1)。 rvalue 被定义为没有地址的任何东西,因此它可以在计算期间存储在注册表中的某处。这就像说 &1
,但当然 1 没有指针。 &
操作数因此只能用于左值,即存储在某个内存地址的值。
在您的情况下,a
已经对应于指向 a[0]
的指针,因此为了打印指向 a[1]
的指针,您实际上只需要:
std::cout << a + 1 << std::endl;
指针算法会将地址增加x * sizeof(T)
,并且由于a
是int
的数组,因此它将a[0]
的地址值增加{{1} },因此sizeof(int)
。