C中赋值算子的相关性

时间:2013-07-10 19:32:34

标签: c operators assignment-operator

我有这段代码:

#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,因此语句1 中的i++;不应增加,然后在赋值之前a [i]实际变为[6]吗?
 声明1 不评估为a[6]=5;
为什么[5]成为5?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

结帐this question了解详情。