主题:C语言高手进下~~赋值语句 我有点不懂的地方
skyruyi
[专家分:0] 发布于 2006-07-26 11:23:00
昨天 C语言我学到了 赋值语句 后来我看到 自增自减运算符 有一个例题我看不懂 我不知道他为什么算出来不是12 而是9 你帮我 看看哈 最好可以把它的运算步奏 写给我 ~~~谢谢 你了
程序一;
main()
{
int j,i=3;
j=(i++)+(i++)+(i++);
printf("%d",j);
} 结果为什么是9
程序二 ;
main()
{
intj,i=3;
j=(++i)+(++i)+(++i);
printf("%d",j);
结果是18 我怎么算 也不是18 啊 迷糊
程序三
main()
{
int a=100;
printf("a++=%d\n",a++); 这些什么意思啊
printf("++a=%d\n",++a); 我看每个程序都有
printf("a--=%d\n",a--); 这些东西 但每个
printf("--a=%d\n",--a); 意思都不一样,
输出结果 我用什么方法一看就
a++=100 知道这些是什么意思
++a=102 呢???
a--=100
--a=102
为什么会是这个结果啊 我不懂什么, 意思
以上的问题 希望 你帮我 看看
在告诉我为什么哈 谢谢你 哟 [em10][em10][em10][em10][em10]
回复列表 (共60个回复)
31 楼
FANB [专家分:90] 发布于 2006-10-14 14:41:00
30楼说的一点都没错,程序1和程序2用的变量是一个地址,不能分开的。再算算!!!!
32 楼
usojay123 [专家分:50] 发布于 2006-10-14 22:59:00
第二题怎么那么多种答案啊``怪了~有15的~~16的~~18的~~
是不是编译器不同输出的也不同呢
我用的VC++~~~把第二个程序完整的输入进去结果是15~~
main()
{
int j,i=3;
int a,b,c,d;
j= (d= (a=(++i)) + (b=(++i)) ) + (c=(++i));//i开始被赋值为3,经过
cout <<j <<i<<a<<b<<c<<d<<endl;
}
我用VC++测试的``结果是j=15
33 楼
迷惘的鹰 [专家分:0] 发布于 2006-10-15 14:23:00
之所以会出现上面那个问题,主要是因为不同编译器的求值顺序不同,如有的编译器认为 j=(i++)+(i++)+(i++)的值是3+4+5=12 而turbo c则把3作为所有表达式的值;所以j=9 关于这方面的问题,你可以去参阅谭浩强的书,写的很详细的。
34 楼
zws8418 [专家分:20] 发布于 2006-10-17 17:03:00
j=(i++)+(i++)+(i++)运算结果是9,可以理解为j=i+i+i,
j=(++i)+(++i)+(++i)运算结果是18,可以理解为i自加1三次后参与运算,
即j=(3+1+1+1)*3=18
多理解这句话:"++i,--i应先自加1(自减1)后参与其运算;i++,i--应i先参与其他运算,后其值再自加1(自减1)."
35 楼
liangdong007 [专家分:2840] 发布于 2006-10-17 18:01:00
你还是没有理解++i和 i++的区别。例如:
void main(){
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++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。
36 楼
我要飞飞飞 [专家分:180] 发布于 2006-10-19 01:47:00
main()
{
intj,i=3;
j=(++i)+(++i)+(++i);
printf("%d",j);
}
我用TC调试的结果也是18 ,我都搞晕了,
37 楼
chinapag [专家分:0] 发布于 2006-11-01 10:06:00
#include "stdio.h"
main()
{
int j,i=3;
j=(++i)+(++i)+(++i);
printf("%d\n%d",j,i);
}
这个我试过了!结果18,15都可以理解!但是结果16是怎么来的呢!请那位详细讲哈!谢谢!
38 楼
m346203104 [专家分:0] 发布于 2006-11-02 17:09:00
同意33楼的
之所以会出现上面那个问题,主要是因为ANSI C没有具体规定表达式中子表达式的求值顺序,不同编译器的求值顺序不同,如有的编译器认为 j=(i++)+(i++)+(i++)的值是3+4+5=12(从左到右)。 而(turbo c和MS C)则把3作为所有表达式的值;所以j=9 关于这方面的问题,你可以去参阅谭浩强的书,写的很详细的。
39 楼
Miracler [专家分:0] 发布于 2006-11-03 16:45:00
这个与编译工具有关!
40 楼
laah [专家分:0] 发布于 2006-11-03 19:37:00
第一个很好懂,因为"x++"这个语句表示先用x初始值,在把x加一。
第二个,先算三个++i,再把 (++i)+(++i)+(++i)加起来。
第三个的结果你弄错了。
我来回复