#include <stdio.h>
int main()
{
int i;
i=0;
printf("%d\n%d\n%d\n", i, &i, &(&i));
return 0;
}
我认为&amp; i只是一个地址值,并假设它是0xFF所以&amp;(&amp; i)应该是0xFF的地址,但为什么它无效?
答案 0 :(得分:7)
一元&
运算符需要左值作为其操作数并返回一个右值。 &i
是左值,因此&i
不能是&
的操作数。
答案 1 :(得分:2)
6.5.3.2。
- 一元&amp;的操作数运算符应该是函数指示符,是a的结果 []或一元*运算符,或指定不是位字段的对象的左值 未使用寄存器存储类说明符声明。
醇>
&i
是对象的地址。
这意味着无法在&
上使用一元&i
,因为地址不指定对象或函数,也不是[]
或{{的结果1}} operator。
您的示例实际上是:*
,常数&0
显然不会落在上面的列表中。
答案 2 :(得分:1)
不要混淆地址和指针。地址是一个rvalue.You不能在它上面应用“地址”(&amp;)运算符。但是,它们是对象。它们是lvalue-s,可以是操作数'&amp;'。
答案 3 :(得分:0)
很简单,这样看待它。你有一个蜜蜂巢。在一个广场上,我放了一些蜂蜜。使用&amp;操作员你指的是那个方块。再次使用&amp;操作员,你指的是广场所在的广场,你不能这样做。
更准确地说,我指的是内存位置是i。你不能参考内存位置的内存位置。