鱼C论坛

 找回密码
 立即注册
查看: 4893|回复: 8

一个我无法理解的C程序

[复制链接]
发表于 2012-9-30 08:40:52 | 显示全部楼层 |阅读模式

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

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

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\n", p, q, i, j);
}

这是小甲鱼老师视频里的一个题。
后来我输出,

18 22 8 8

为什么q==22呢???
不应该是6+7+8=21么???
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-30 09:22:57 | 显示全部楼层
你用的是6.0吧!在6.0下规则是这样的,先运算前两个,也就是q=(++j)+(++j)    ++j 是6   再++j是7
然后7覆盖(++j)+(++j)    也就是7+7   =14       然后再算后面的一个++j   这时候j是8     再和前面的14相加!如果是在VS2008下结果应该是24  就是先++j到第三个运算j是等于8,  然后再覆盖前面的J的值,就是三个8相加,等于24!不知道你能不能理解什么意思!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-30 09:31:42 | 显示全部楼层
过程是这样的 首先j=6 然后 j= 7这是第一个运算“+”号的两个操作数  此时由于第二个j已经变成7了 所以第一个j此时不是6了 而是7。然后接下来就运算14+8了 !
不知道楼主 明白了没有?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-30 16:41:03 | 显示全部楼层
这个问题楼主不要纠结了。小甲鱼老师不是也说了:这种运算符最好不要出现在这种表达式里。我看老师的视频时,用我的VC++2010编译的结果和老师的就不一样。不用纠结。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-9-30 16:46:23 | 显示全部楼层
呵呵,确实不用纠结这种问题,实际中又不会用到,而且也没有意义,因为根据编译器厂商好像结果会有所不同。。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-9-30 17:05:24 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-9-30 17:05:56 | 显示全部楼层
追忆_、流年 发表于 2012-9-30 09:31
过程是这样的 首先j=6 然后 j= 7这是第一个运算“+”号的两个操作数  此时由于第二个j已经变成7了 所以第一 ...

谢谢了,,,懂了。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-9-30 17:06:59 | 显示全部楼层
贝壳 发表于 2012-9-30 16:41
这个问题楼主不要纠结了。小甲鱼老师不是也说了:这种运算符最好不要出现在这种表达式里。我看老师的视频时 ...

嗯,谢谢了啊
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2012-9-30 17:37:35 | 显示全部楼层
飘香夜梦 发表于 2012-9-30 16:46
呵呵,确实不用纠结这种问题,实际中又不会用到,而且也没有意义,因为根据编译器厂商好像结果会有所不同。 ...

谢谢了,懂了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-11-15 08:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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