a[i++] = 3 是否未定义?

is a[i++] = 3 undefined?

我是一名新手程序员(自 9 月以来一直在 CS 课程中学习 C)我一直在阅读以下两个问题,以尝试了解序列点和与它们相关的未定义行为.

Why are these constructs (using ++) undefined behavior?

Why is a = i + i++ undefined and not unspecified behaviour

我现在明白了

a[i] = i++;

导致未定义的行为。我在想

a[i++] = 4;

属于同一类别,但我找不到任何人在任何地方讨论这个具体示例。

不,后者不是未定义的行为,因为您没有在两个序列点之间多次修改和访问 i

没关系。

a[i] = i++; 的问题在于 i++ 中的修改与 a[i]i 中的读取是分开的。修改可以在读取之前、期间或之后进行。

由于 a[i++] = 4; 不会独立于其修改读取 i,因此您没有这个问题。