鱼C论坛

 找回密码
 立即注册
查看: 2200|回复: 7

【C语言】 i++ 与 ++i

[复制链接]
发表于 2014-9-30 12:29:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include <stdio.h>

void main()
{
        int i = 5, 
                j = 5,
                p, q; 
        p = (i++ )+ (i++ );
        q = (++j )+ (++j );
        printf("%d, %d, %d, %d\n", p, q, i, j );
}
求助:为什么 q = 14 ,而不等于13呢?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-30 16:49:18 | 显示全部楼层
根据优先级,先进行括号里面的运算, 第一个括号里面运行以后j=6,第二个括号里面运行以后j=7,你的疑问就是那6+7不是等于13吗?但是,C语言的局部变量是在栈里面存储,你暂时可以将这个式子理解为q = (j = j+1) + (j = j+1); 第一个括号里面的j和第二个括号里面的j是栈里面同一个地址存储的同一个值,所以,运行完第二个括号以后,前面一个括号的值也就变成7了,所以q=7+7=14.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-10-10 15:51:56 | 显示全部楼层
Answer.zhang 发表于 2014-9-30 16:49
根据优先级,先进行括号里面的运算, 第一个括号里面运行以后j=6,第二个括号里面运行以后j=7,你的疑问就是 ...
#include <stdio.h>
void main()
{
        int j = 5, q;
        q = (++j )+ (++j )+ (++j);
        printf("%d, %d\n", q, j );
}

但是 这里为什么又是 q= 7+ 7+ 8= 22 了呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-10 16:30:09 | 显示全部楼层
箜白 发表于 2014-10-10 15:51
但是 这里为什么又是 q= 7+ 7+ 8= 22 了呢?

系统会先计算前两个++j,结果为14,然后再++j,14+8=22!
这个要了解CPU怎样处理数据,以前在哪看过,具体也不太清楚!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-10 17:48:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-10 17:49:44 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-10-11 09:24:40 | 显示全部楼层
程序会先计算前两个++i,  q=(++i)+(++i)+(++i)第一个++i之后,为6,再第二个之后,为7,这时i=7,这时有q=7+7+(++i);i再自加一,为8,q=7+7+8=22;

如果有N多个++i,同样,先计算前两个++i,改变数值之后,其实相当于i已经加了2,再执行就是一次加一;比如,i=5,q=(++i)+(++i)+(++i)+(++i),就是q=7+7+8+9=31;

有专业人士说过这是计算顺序点的问题,是一个无意义的问题,我们不必计较这些毫无意义的问题!

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
policewj + 1 + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2014-10-31 23:47:11 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 05:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表