以下是引用shiyunxu在2007-9-24 10:00:46的发言:
程序1:
a=2;
b=(++a)+(a++)+( a--)+(--a);
printf("d",b);
程序2:
a=2;
printf("d",(++a)+(a++)+( a--)+(--a));
两程序的运行结果分别为8,12。
请问为何??
printf后面的是%d,%这个符号是格式说明符号,别丢了》。。
这个运行结果没有错误.你自己想想,你的编译器如果错了,那还弄什么编程啊。。呵呵。。
我亲自试验过了,TC下面,第一个题目是8,VC下面,结果是11,GCC下面,结果也是11.
第二个题目,TC下面是12,VC下面也是11,GCC下面也是11.
总结,楼主使用的是古董TC编译器.TC编译器的顺序是:
第一题目:从左向右,最后a是2.4个2加起来是8
第二题名:从右向左,最后a是3.4个3加起来是12
----------------解决方案--------------------------------------------------------
以下是引用xiaopi_zj在2007-9-24 14:54:11的发言:
i++ 是先赋值 再自增
所以j=product(i++);相当于j=(i++)*(i++) 的结果为3*3=9 i自增了两次所以i=5
++i 是先自增 再赋值
所以k=product(i++);相当于j=(i++)*(i++) 第一个括号i=6 第二个括号时i=7 所以此时的i=7
结果就是7*7=49
我这么总觉得是 6*7=42,按我个人的理解,我觉得第二个++i对一个没影响,我们不是先使用的6,然后才计算第二个++i。
----------------解决方案--------------------------------------------------------
回复:程序2:
a=2;
printf("d",(++a)+(a++)+( a--)+(--a));
这里的a一直在改变 程序运算过程是:3+3+4+2=12
----------------解决方案--------------------------------------------------------
[QUOTE]
i++ 是先赋值 再自增
所以j=product(i++);相当于j=(i++)*(i++) 的结果为3*3=9 i自增了两次所以i=5
++i 是先自增 再赋值
所以k=product(++i);相当于j=(++i)*(++i) 第一个括号i=6 第二个括号时i=7 所以此时的i=7
结果就是7*7=49
[/QUOTE]
你看这样是不是容易理解:
x=(++i);
k=product(++i);相当于j=x^2; /* ++是先自增再运算的,那么第一个x自增后就是6啦,后边的x在6的基础上又自增为7,
由于它们同为x,那么它们的值是不是会受到影响啊? 最后相当j=x^2 那么结果
就是 7^2=49啦.*/
[此贴子已经被作者于2007-9-24 23:31:02编辑过]
----------------解决方案--------------------------------------------------------
b=(++a)+(a++)+( a--)+(--a);
相信很少有人会去这样写程序,而且结果也和编译器有关,移植性很差
----------------解决方案--------------------------------------------------------
我是学C++入门的,现在对++操作符的运用都不是很得心应手啊
----------------解决方案--------------------------------------------------------