论坛: 编程破解 标题: C语言问题,请高手解答 复制本贴地址    
作者: 冰之狼 [jaychou]    论坛用户   登录
有这样的程序
main()
{int i=5;
printf("%d,%d",i,i++);}
根据如果表达式中只有同一变量那么结合性从右向左的原则,打印出6,5
第二个程序
main()
{int i=5;
printf("%d,%d",++i,i++);}
根据同样的原则打印出7,5
第三个程序main()
{int i=5;
printf("%d,%d",++i*i++);}
我是这样考虑第三个程序的,首先做i++,i此时的值为6,但是i++的值为5然后做++i此时++i和i的值都为7,那么输出的结果应该是7*5=35,可是计算机打印的结果36
于是我又作了这样的试验
main()
{int i=5;
printf("%d",(++i,i++));}
打印结果是6,也就是说当运算++i以后,i++的值也随之改变,单和第二个程序比起来又好像是矛盾的,请高手解答

地主 发表时间: 06-02-16 02:00

回复: dw84307722 [dw84307722]   论坛用户   登录
当i++,++i是同一个变量,两个或两个以上式子出现在printf中的是按照从右向坐的顺序计算
但是第三个程序++i*i++是一个式子这当然不能按照从左向右的计算方法了.++i的值是6,i++是先
用上个i的值6然后i再加一变成7 所以++i*i++的结果是36(++i为6 6*6=36 i++) 
再解答你的最后一个问题,(++i,i++)被看成了是一个逗号表达式,逗号表达式是按照从左向右计算的
所以打印的值为6。 
我可能说的不大清楚..如果还不明白的话加我Q 40697753

B1层 发表时间: 06-02-16 11:08

回复: 啥都不会 [sniper167]   论坛用户   登录
对头
第三个程序中
main()
{
    int i=5;
    printf("%d,%d",++i*i++);
}
++i*i++ 是一个表达式,所以无需考虑从右到左的原则

main()
{  int i=5;
    printf("%d",(++i,i++));
}
而这个程序只打印一次i,所以是 ++i,i++里面i++的值

B2层 发表时间: 06-02-16 12:08

回复: moyer [moyer]   论坛用户   登录
我想问一下,从右到左的原则什么时候用?舍也不会说不需要,我越看越糊涂啦,碰到这样的情况,我都是在机子上运行看结果的,能不能再讲详细点?谢谢了

B3层 发表时间: 06-02-24 09:22

回复: honyry [honyry]   论坛用户   登录
++是先加还是后加的问题
++I是先加后用
I++是先用后加
第一个程序
printf("%d,%d",i,i++);
从右向左i++中的i用前是5用后是6
因为i++用过了 所以i=6
结果就是6,5
第二个程序
printf("%d,%d",++i,i++);
从右向左i++中的i用前是5用后是6
因为i++用过了 所以i=6
然后到++i是先加后用
先加所以i=7
结果就是 7,5
第三个程序
printf("%d,%d",++i*i++);
关系到运算符结合问题了
++i*i++的结合应该是((++i)*i)++,++和*等级是一样优先
++i先加后用i=6  就是 (6*6)++ 所以结果就是36
第四个程序
等同于printf("%d",++i);
因为你后面用的是个逗号表达式 所以结果是六
即使是你加两个%d那也只是和第二程序一样了
不信你可以试一下这个
main ()
{int a=5,b=6;
printf("%d",(a,b));
}
看它的打印结果
是5
你的第四个程序并不能说明问题  。

B4层 发表时间: 06-02-24 12:54

回复: laneease [laneease]   论坛用户   登录
http://bbs.chinaunix.net/viewthread.php?tid=705753&extra=page%3D1

B5层 发表时间: 06-02-27 02:39

回复: air [airxmg]   论坛用户   登录
为什么会从右到左的?????

B6层 发表时间: 06-03-08 08:38

回复: honyry [honyry]   论坛用户   登录
有些系统是有些不是

B7层 发表时间: 06-03-08 17:58

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号