鱼C论坛

 找回密码
 立即注册
查看: 2844|回复: 6

小问题

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

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

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

x
#include <stdio.h>
void main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);

}
q=(++j)+(++j)+(++j);  ++j=6  对吗
那q为什么=22呢
i为什么=8呢
求救

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-30 19:19:27 From FishC Mobile | 显示全部楼层
因为有括号先算括号里的++和--第二个括号的值在不断变化,(J++)==J+1==J
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-12-31 08:42:06 | 显示全部楼层
解释清楚点啊
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-31 11:47:50 | 显示全部楼层
支持,一起弄明白!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-31 13:47:53 | 显示全部楼层
正常理解是执行完整个表达式的操作后,然后才自增;所以
p = (i++) + (i++) + (i++)
p = 5 + 5 + 5
然后i再自增3次,i = 8;
同理 q = (++j) + (++j) + (++j),不能按
q = 6 + 6 +6 ,显然不对;表达式中除了预算法本身的优先级外,还有一个结合性问题。
在(++j) + (++j) + (++j)中,存在两个同级的+运算,根据+运算符的左结合性,
在编译时,其实是先处理前面的(++j) + (++j)这部分,然后再将此处结果再和++j相加。
q = (++j) + (++j) + (++j)
   =[ (++j) + (++j) ]+ (++j)
   =(7 + 7) + 8
   = 22
最后 j=8。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-31 14:01:05 | 显示全部楼层
我去怎么还有人问这个问题啊 不是已经小甲鱼 节约过了吗
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-12-31 14:02:19 | 显示全部楼层
请在网站上搜索下小甲鱼回答的问题 会更详细,他是在原理跟讲解上分析的,我忘了我在汇编上哪个视频上看到过,第一章里面的视频
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-10 12:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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