问题描述:
main()
{int x=16,y;
printf("x=%d\n",x);
printf("x=%d,y=%d\n",x,++x);
printf("x=%d,y=%d\n",x,x++);
请问,第2哥输出函数中,(x,++x)是不是先算++x,后算x,这样是不是叫自增是自右至减算的
答案是
16
17,17
18,17
我就是弄不懂为什么要先算++x后算x
问题解答:
不是
第二个之所以结果是x=17,y=17是输出函数的问题,
printf("x=%d,y=%d\n",x,++x);
先算x,再算x++;当他做完
x++时改变了x的值,结果要输出x的值时输出了17,并不是因为先算x++;
运算符自左向右或自右向左是指多个操作数的情况,如
+是自右向左运算的,a+b+c是先算b+c在将其结果与a相加,而不是向我们平常那
样a+b在将其结果与c相加
很明显的一个例子是
int x=5;
cout<<x+(++x)<<endl;
结果是12,而不是11,因为它先运算了++x,此时x已经变为6了,若从左向右,
则结果是11
VC 6.0编译通过,答案是
16,
17,17
17,17
原因是,在prinf()函数中是从最后面的参数开始算起的。而且是从左到右全部计算完后再进行显示,所以 printf("x=%d,y=%d\n",x,++x); printf("x=%d,y=%d\n",x,x++); 的结果相同。
再出道多余的题目有给你:
int y=7
printf("%d",++y+(++y));
和
printf("%d",y+++y++);
的值是多少?
答案是18和14
这是C语言的规定
详细参考谭浩强的《C语言程序设计》。有说明
一般写程序时候不会用这样的方法的。不符合编程规范
答案应该时:
16
16,17
17,17
++x 表示先加后用
x++ 表示先用后加