| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 517 人关注过本帖
标题:一道c语言不会
只看楼主 加入收藏
wangxingang
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2008-10-31
结帖率:0
收藏
已结贴  问题点数:10 回复次数:5 
一道c语言不会
#include <stdio.h>
void main(void)
{
     int i=5,j=5,p,q,a,b,c;
     p=(i++)+(i++)+(++i);
     q=(++j)+(++j)+(++j);
     printf("%d,%d,%d,%d\n",p,q,i,j);
}
在VC++6.0环境下的结果是16,22,8,8
本人不明白这个结果22,我觉得应该是6+7+8为21
可是运行结果就是22
这是为什么呢?
哪位可以说明一下,谢谢
搜索更多相关主题的帖子: c语言 
2010-03-27 15:22
hzh512
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:234
专家分:1333
注 册:2009-6-5
收藏
得分:2 
先贴出汇编代码:
.file    "1.c"
    .text
.globl main
    .type    main, @function
main:
    leal    4(%esp), %ecx
    andl    $-16, %esp
    pushl    -4(%ecx)
    pushl    %ebp
    movl    %esp, %ebp
    pushl    %ecx
    subl    $16, %esp
    movl    $5, -12(%ebp)//-12(%ebp)就是j
    addl    $1, -12(%ebp)
    addl    $1, -12(%ebp)
    movl    -12(%ebp), %eax
    addl    %eax, %eax
    addl    $1, -12(%ebp)
    addl    -12(%ebp), %eax
    movl    %eax, -8(%ebp)
    movl    $0, %eax
    addl    $16, %esp
    popl    %ecx
    popl    %ebp
    leal    -4(%ecx), %esp
    ret
    .size    main, .-main
    .ident    "GCC: (Debian 4.3.2-1.1) 4.3.2"
    .section    .note.GNU-stack,"",@progbits

很明显,先算括号(++j)+(++j),因为括号优先级大,此时j=j+1+1=7;这时结果7+7=14
然后,14+8=22

编程=用几种语言在某个或几个平台上通过抽象思维运用一系列算法来解决现实中问题的手段
2010-03-27 15:47
wangxingang
Rank: 1
等 级:新手上路
帖 子:27
专家分:5
注 册:2008-10-31
收藏
得分:0 
回复 2楼 hzh512

明白了,thank you
2010-03-27 16:05
llooppzhang
Rank: 7Rank: 7Rank: 7
来 自:江苏
等 级:黑侠
威 望:5
帖 子:308
专家分:518
注 册:2009-10-18
收藏
得分:2 
不懂
2010-03-28 12:59
zhushilu
Rank: 1
等 级:新手上路
帖 子:19
专家分:3
注 册:2010-3-27
收藏
得分:2 
这些已经忘得差不多了
2010-03-28 15:20
雪鹰独行
Rank: 2
等 级:论坛游民
帖 子:40
专家分:10
注 册:2009-7-18
收藏
得分:2 
也学习了
2010-03-28 15:41
快速回复:一道c语言不会
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035709 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved