【问题标题】:Associativity of assignment operator in C [duplicate]C中赋值运算符的关联性
【发布时间】:2013-07-08 21:33:25
【问题描述】:

我有这个代码:

#include<stdio.h>
main()
{
    static int a[10];
    int  i=5;
    a[i]=i++;// **statement 1**

    printf("%d %d",a[6],a[5]);
}

我得到以下输出:
0 5
既然赋值运算符是 RTL,难道i++;in statement 1 不应该增加,然后 a[i] 在赋值之前实际上变成 a[6] 吗?
语句 1 的计算结果不是a[6]=5;吗?
为什么 a[5] 变成了 5?

【问题讨论】:

  • 最好避开这段代码。
  • 天哪,我喜欢这个网站。不到5分钟,反应惊人。就问题而言,我不知道“未定义的行为”现在会进行研究。非常感谢:)
  • @Shivaji_Vidhale;最好阅读 thisthis 以及 this one
  • @DanielFischer 这个案例不是 UB。

标签: c operators assignment-operator


【解决方案1】:

您正在尝试访问和修改同一 sequence point 中的同一变量(即同时)。这是一种未定义的行为。

结帐this question了解更多信息。

【讨论】:

    【解决方案2】:

    这是因为= 不是 C 语言的序列点。因此,a[i] = i++ 会调用未定义的行为。

    这更好地解释了herehere(感谢 Daniel Fischer)

    【讨论】:

      【解决方案3】:

      根据语言规范,这是一种未定义的行为;)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-24
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 2014-10-16
        相关资源
        最近更新 更多