论坛: 编程破解 标题: C语言问题,请高手解答 复制本贴地址    
作者: 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号