比如
i=2;
f(i,++i);
自左而右求值的意思是先求左边的表达式的值再求右边的表达式的值
也就是说初衷是先求i的值,再求++i的值,也就是f(2,3)但是实际上是f(3,3),要实现f(3,3)就可以
j=i;
k=++i;
p=f(j,k);
2.printf("%d,%d",i,i++);“
对于大多数编译器来说printf函数的参数求值是从右往左的,也就是先进行i++,然后求i
以上情况基本只会出现在考试中(并且结果还不定),实际当中出现这样的代码估计会被卷铺盖走人
其实,你搞懂printf("%d, %d", i, i++);后,上面的都应该很好理解了。
函数的栈跟函数参数的关系,当参数压入栈时一般是从最右边的参数开始的,所以
如果i = 2的话,打印的应该是"3, 2"
但是,有些编译器(比如gcc)会对此做优化,优化后的结果可能是"3, 3"
如果再用volatile关键字修饰i后,就会按照理论值"3, 2"输出。