别以为你对i++和++i和了解

来源:百度知道 编辑:UC知道 时间:2024/05/31 17:54:07
如果你的回答的是i++是先赋值后再自加,++i是先自加再赋值那么请不要浪费ATP了.如果你要讲得是两者的执行效率那么也不要讲了.这个在这里没关系.还有我要说的是我在这里是用同一个编译软件的,也就是Microsoft Visual C++ 6.0 所以他跟我们所说的在不同的编译环境中不同也是没有关系的.
如果你真的要帮我的话请耐心看我写的东西。谢谢
(下面代码中的# #只是为了强调实际产生的结果)

#include<stdio.h>
void main()
{
int t=3;
printf("%d,%d",t,t++);
}

这个程序按照书上的习惯从由往左运算应该等于 4,3。
而实际在本系统运算的结果是 #3,3#。
书上指出有的系统是从左向右求值的,输出结果3,3。
也就是说本系统是从左向右运算的。先求t的值,再求t++的值。

但是:
#include<stdio.h>
void main()
{
int t=3;
printf("%d,%d",++t,t);
}

这个程序理论上来说运行的结果应该是4,4才对。
事实上结果是#4,3#。
这么一来感觉上好象

#include<stdio.h>
void main()
{
int t=3;
printf("%d,%d",t++,t);
}

更奇怪的是这样一个程序的结果居然也是#3,3#。
本系统似乎只对t++的先运算起效。而对后赋值就不怎么清楚了。

#include<stdio.h>
void main()
{
int t=3;
printf("%d,%d",t,++t);
}

这不是个简单的结合问题,在printf的时候参数是从右向左压栈的,

printf("%d,%d",t,t++);
这个比较特殊,我用G++的时候是4,3
用VC反汇编发现是压入3,压入3,然后再++

printf("%d,%d",++t,t);
压栈后栈中的情况是 t=3,压入3,计算++t,压入4
输出是4 3

printf("%d,%d",t++,t);
压入3,压入3,计算t++,

printf("%d,%d",t,++t);
计算,++t,t=4,压入4,压入4
输出是4 4

做这种题没有什么意义。

除了++.你还要注意那个逗号运算符

做这样的东西,不如花点时间看一下经典的算法...支持dielsalder..说得不错.就是这样的