为什么&(& i)在C中无效?

时间:2016-05-22 15:49:50

标签: c

#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的地址,但为什么它无效?

4 个答案:

答案 0 :(得分:7)

一元&运算符需要左值作为其操作数并返回一个右值。 &i是左值,因此&i不能是&的操作数。

答案 1 :(得分:2)

  

6.5.3.2。

     
      
  1. 一元&amp;的操作数运算符应该是函数指示符,是a的结果   []或一元*运算符,或指定不是位字段的对象的左值   未使用寄存器存储类说明符声明。
  2.   

&i是对象的地址。

这意味着无法在&上使用一元&i,因为地址不指定对象或函数,也不是[]或{{的结果1}} operator。

您的示例实际上是:*,常数&0显然不会落在上面的列表中。

答案 2 :(得分:1)

不要混淆地址和指针。地址是一个rvalue.You不能在它上面应用“地址”(&amp;)运算符。但是,它们是对象。它们是lvalue-s,可以是操作数'&amp;'。

答案 3 :(得分:0)

很简单,这样看待它。你有一个蜜蜂巢。在一个广场上,我放了一些蜂蜜。使用&amp;操作员你指的是那个方块。再次使用&amp;操作员,你指的是广场所在的广场,你不能这样做。

更准确地说,我指的是内存位置是i。你不能参考内存位置的内存位置。