|
![]() | 作者: jaychou [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 [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号