|
![]() | 作者: 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 01:58 |
![]() | 回复: jhkdiy [jhkdiy] ![]() |
登录 |
第三个程序我认为是这样的: ++i*i++变为: 从右边开始扫描,预见i++,但由于是后加,所以先计算++i*i, 之后又遇到++i, 现在是先加,所以i由5变6, 好了,现在计算i*i,此时i=6。所以结果为36。由于结果已出,所以输出36,最后计算之前最右边的++,现在为i=7。但现在程序没有输出这个结果。 验证程序: #include <stdio.h> main() { int i = 5; printf("%d, %d", i, ++i*i++); getch(); } |
B1层 发表时间: 06-02-17 14:04 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号