以下是引用lampeter123在2010-8-12 17:27:37的发言:
谭浩强爷爷的<>一书中:
【例3.17】
main(){
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
}
这个程序中,对P=(i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8。
//其实讨论这个问题是没有任何意义的, 不同编译器有不同的结果,最好不要写这样的句子
赞同楼上的观点
对于C的过分要求我认为是不必的,现在很多学校的考试重点仍然是运算符优先级、printf的参数表这些东西,我的天,这些东西在实际中是非常不好用,或者说是可以不必理会的。对于运算符优先级,多用几个括号不就结了。我认为需要理解的东西是这些“过时”东西背后体现的本质(指针,内存),而不是老旧了的本身。