回 帖 发 新 帖 刷新版面

主题:C语言高手进下~~赋值语句 我有点不懂的地方

昨天 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 楼

30楼说的一点都没错,程序1和程序2用的变量是一个地址,不能分开的。再算算!!!!

32 楼

第二题怎么那么多种答案啊``怪了~有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 楼

之所以会出现上面那个问题,主要是因为不同编译器的求值顺序不同,如有的编译器认为 j=(i++)+(i++)+(i++)的值是3+4+5=12 而turbo c则把3作为所有表达式的值;所以j=9  关于这方面的问题,你可以去参阅谭浩强的书,写的很详细的。

34 楼

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 楼

你还是没有理解++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 楼


main()
{
     intj,i=3;
     j=(++i)+(++i)+(++i);
     printf("%d",j); 
}

我用TC调试的结果也是18 ,我都搞晕了,

37 楼


#include "stdio.h"
main()
{
     int j,i=3;
     j=(++i)+(++i)+(++i);
     printf("%d\n%d",j,i);
}
这个我试过了!结果18,15都可以理解!但是结果16是怎么来的呢!请那位详细讲哈!谢谢!

38 楼


同意33楼的
之所以会出现上面那个问题,主要是因为ANSI C没有具体规定表达式中子表达式的求值顺序,不同编译器的求值顺序不同,如有的编译器认为 j=(i++)+(i++)+(i++)的值是3+4+5=12(从左到右)。 而(turbo c和MS C)则把3作为所有表达式的值;所以j=9  关于这方面的问题,你可以去参阅谭浩强的书,写的很详细的。

39 楼

这个与编译工具有关!

40 楼

第一个很好懂,因为"x++"这个语句表示先用x初始值,在把x加一。
第二个,先算三个++i,再把 (++i)+(++i)+(++i)加起来。
第三个的结果你弄错了。

我来回复

您尚未登录,请登录后再回复。点此登录或注册