2

我有这个代码:

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

4

3 回答 3

1

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

这在此处此处得到了更好的解释(感谢 Daniel Fischer)

于 2013-07-10T19:38:41.493 回答
0

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

于 2013-07-10T19:33:55.233 回答
0

您正试图在同一个序列点(即同时)访问和修改同一个变量。这是一种未定义的行为。

查看此问题以获取更多信息。

于 2013-07-10T19:39:15.230 回答