对于测试代码如下:
#include <stdio.h>
int addTen(int x, int b[])
{
b[2] = x + b[2];
return b[2];
}
void main(void)
{
int a[3] = {4,5,6};
int i = 2;
printf("%i %i %i \n", a[i], addTen(10,a), a[i]);
}
为什么输出是16,16,6?我知道即使编译器从右到左处理顺序,如[i]&lt; - addTen(10,a)&lt; -a [i]。在调用addTen(10,a)之后,a [i]已经是16(而不是6)。那么为什么输出不是16,16,16?谢谢!
答案 0 :(得分:4)
未定义的行为 ,您应该阅读sequence points。您正在修改a
并同时在同一表达式中阅读它。
此外,评估顺序未定义。
答案 1 :(得分:4)
没有定义用于评估参数的顺序。编译器可以按任何顺序自由地评估参数,并且通常会选择最方便的顺序。因此,您无法定义任何预期的输出。