2016-01-24 91 views
3

我是一个新手程序员(在学习上的CS当然为九月以来)我一直在阅读以下两个问题,以试图让我的头周围序列点,这涉及到他们的不确定的行为,。是[i ++] = 3未定义?

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

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

我现在明白了,

a[i] = i++; 

导致一个未定义的行为。我想知道是否

a[i++] = 4; 

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

+2

[编号它不是UB](http://stackoverflow.com/a/32798674/3049655) –

+1

没有。它不是undefined – Haris

+2

这也是一个相当常见的成语。 – Sneftel

回答

2

这很好。

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

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

6

不,后者不是不确定的行为,因为你不修改和访问i超过两个序列点之间的一次。