问为什么这段代码
a[i] = i++;的函数调用是否会工作?
答子表达式i++会产生副作用——它会修改i的值——这会导致未定义的行为,因为i在同一表达式中的其他地方也被引用。无法知道引用是在副作用之前还是之后发生——事实上,没有一种明显的解释可能成立;请参阅问题 3.9。(请注意,虽然 K&R 中的语言暗示此表达式的行为是未指定的,但 C 标准则更明确地指出它是未定义的——请参阅问题 11.33。)
参考:K&R1 第 2.12 节
K&R2 第 2.12 节
ISO 第 6.3 节
H&S 第 7.12 节 pp. 227-9