【问题标题】:Why &(&i)is not valid in C?为什么 &(&i) 在 C 中无效?
【发布时间】:2016-05-22 15:49:50
【问题描述】:
#include <stdio.h>
int main()
{
int i;
i=0;
printf("%d\n%d\n%d\n", i, &i, &(&i));
return 0;
}

我认为&i只是一个地址的值,并假设它是0xFF所以&(&i)应该是0xFF的地址但是为什么它是无效的?

【问题讨论】:

  • 0xFF的地址是什么?
  • ..因为这比穆里尼奥接手曼联更没有意义。
  • 我的意思是0xFF也是一个常数,所以应该有一个常数是指常数'0xFF'的地址

标签: c


【解决方案1】:

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

【讨论】:

  • 将变量的地址视为常量吗?
  • @ameyCU;是的。
  • 非常感谢!我完全明白了!
【解决方案2】:

6.5.3.2.

  1. 一元 & 运算符的操作数应为函数指示符, [] 或一元 * 运算符,或指定不是位域的对象的左值,并且是 未使用寄存器存储类说明符声明。

&amp;i 是一个对象的地址。

这意味着一元 &amp; 不能用于 &amp;i,因为地址不指定对象或函数,[] 或 * 运算符的结果也不是。

您的示例实际上是:&amp;0,而常量0 显然不属于上述列表。

【讨论】:

    【解决方案3】:

    不要混淆地址和指针。地址是一个右值。你不能在它上面应用“地址”(&) 运算符。但是指针是对象。它们是左值,可以是'&'。

    【讨论】:

      【解决方案4】:

      简单,这样看。你有一个蜂巢。我在一个正方形里放了一些蜂蜜。使用 & 运算符,您可以引用该正方形。再次使用 & 运算符,您指的是正方形所在的正方形,您不能这样做。

      更准确地说,&i 指的是内存位置是 i。您不能引用内存位置的内存位置。

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 2011-02-22
        • 1970-01-01
        • 2013-03-24
        • 2014-09-04
        • 2011-08-24
        • 1970-01-01
        • 2019-04-26
        相关资源
        最近更新 更多