问题描述:
int j=2;
printf("j=%d",(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));
运算结果j=5.书上写输出结果为5,是因为函数调用中参数按照从右到左的顺序求值。照这么算的话,假如按照从左到右求值的话那么J是不是等于2
问题解答:
如果按照从左至右的顺序,在屏幕上显示的是j=2,但最后j的值在内存中已是5,因为j的初值是5,在显示完j=5后再运算(j++)+(j++)+(j++),运算完(j++)+(j++)+(j++)内存中的j值就是5,如果题中问j的值,无论顺序怎样,结果都是5
j=2
(j++)+(j++)+(j++)
当第执行第一个j++,j=3接着第二个j++,j=4,接着第三个j++,j=5,最后的结果就是5
这一句输出printf("j=%d",(j++)+(j++)+(j++)=%d\n",j,(j++)+(j++)+(j++));最后的结果算(j++)+(j++)+(j++),因为是逗号表达式,只算右值。
如果是从左到右计算输出的话,J输出等于2