为什么C语言中printf("%d",x-->(x+y));输出的是1呢,而不是0?
最近我在做练习的时候遇到了这样一个问题,请大家帮忙!
题目是这样:
int x=1,y=0;
求x-->(x+y)的值?
我用printf("%d",x-->(x+y));
在VC++6.0,输出的是0;
但是在Tubor c2.0下,确是1,不知道为什么?
还有的问题就是C语言是怎样解析表达式的!
麻烦大家了!
问题点数:0、回复次数:11Top
1 楼lbing7(向青润老大学习!!!)回复于 2005-06-03 13:01:07 得分 0
x-->(x+y)
....................
上面那个是什么东西??Top
2 楼lbing7(向青润老大学习!!!)回复于 2005-06-03 13:06:53 得分 0
没看过编译后的汇编代码,我猜一下
在VC++6.0,输出的是0;
作为:
0>0 //x自减后再求解所有表达式
但是在Tubor c2.0下,确是1
作为:
1>0//X的值作为表达的的值,再自减运算Top
3 楼foochow(无聊,灌水......)回复于 2005-06-03 13:07:33 得分 0
mark!!不知道Top
4 楼myyingmingmy(jklj)回复于 2005-06-03 13:25:05 得分 0
只是编译器的不同而已
次序是不一样的
C语言中函数运算次序一般是从右至左的Top
5 楼zloves(俺是菜鸟)回复于 2005-06-03 13:26:47 得分 0
dingTop
6 楼whyglinux(山青水秀)回复于 2005-06-03 13:30:27 得分 0
x-->(x+y)的结果是不确定的,因为它的结果跟操作数的求值顺序有关。但是由于标准并没有对操作数的求值顺序作出规定,所以这是一个没有定义的表达式。
无定义的表达式一般有这样的特点:表达式中一个变量(如上式中的 x)被改变一次或以上(x--),但是却被使用两次或以上(x > x+y)。在程序中使用无定义的表达式是错误的。Top
7 楼mostideal(三甲)回复于 2005-06-03 13:35:10 得分 0
楼上的说的有理。。。Top
8 楼icansaymyabc(学习与进步)回复于 2005-06-03 13:41:40 得分 0
考这种题真是无聊Top
9 楼whatsouta(某疯子)回复于 2005-06-03 13:42:37 得分 0
这个跟编译器有关Top
10 楼aladdin2006(回答问题不接分,不想要分,只为提高技术,解决问题)回复于 2005-06-03 14:00:25 得分 0
c#和 VC 用的是一个的编译器 ,TC是另一个编译器 有区别的。你可以找个++ ,--这样的运算组合就可以检验出来的,结果包准不一样Top
11 楼soft_biao(巴不豆)回复于 2005-06-03 14:39:07 得分 0
编译器问题Top
相关问题
- printf("%*c",......)
- C语言太讽刺了吧?printf("幂:%d\n" , x^y) ;(x=5,y=2),,得到结果7???????????高人解释一下,^不是求幂吗?
- 哪位有解f = a*x*x+b*y*y+c*x*y+d*x+e*y+g的代码啊???
- 如何解析((a + b - (a * b) % (c + d)) / x - y + (w * z))的結果?
- 如何解析((a + b - (a * b) % (c + d)) / x - y + (w * z))的結果?
- 如何解析((a + b - (a * b) % (c + d)) / x - y + (w * z))的結果?
- 【 魂 断 C S D N 】
- a b c d 四个数组,
- d版borland c++ builder"6"
- c_z_y(用力)请进:-)




