表达式的右侧会先评估还是左侧?
void main ()
{
int i = 0 , a[3] ;
a[i] = i++;
printf ("%d",a[i]) ;
}
答案 0 :(得分:16)
未指定赋值运算符的操作数的评估顺序:可以按任何顺序计算操作数。
但是,此表达式(a[i] = i++
)会产生未定义的行为,因为您同时修改i
(使用i++
)并单独阅读i
(使用a[i]
)这些行动之间没有序列点。
答案 1 :(得分:3)
C没有定义首先评估哪一方。标准状态(C99§6.5/ 2):
在前一个和下一个序列之间 指向一个物体应该存储它 最多修改一次的值 表达的评价。 此外,先前的值应为 只访问以确定值 存储
您发布的上述结果因此是UB。