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
,因此您没有这个问题。
我是一名新手程序员(自 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
,因此您没有这个问题。