鱼C论坛

 找回密码
 立即注册
查看: 4906|回复: 17

C语言新手求助 i++ 这个问题

[复制链接]
发表于 2013-3-23 10:37:01 | 显示全部楼层 |阅读模式

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

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

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);
}

为什么算出的结果是p=15,q=22啊,这个15和22到底是怎么算出来的呢,这个i没有重新赋值吗,想了老半天都想不通,求各位给个解释,先谢过了!

小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-23 10:41:02 | 显示全部楼层
错误的代码 结果不可靠的 可以有无数个不同的输出
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-23 10:56:11 | 显示全部楼层

我这个是按照小甲鱼老师视频里面的代码敲的啊,不会有错吧,师兄告诉我哪里出错了呢,我对照了好几遍了……
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-23 13:03:46 | 显示全部楼层
不要这样写,不同编译器会产生不同结果,所以各种情况都有可能,看你用什么编译器了
有些编译器还可能是15,24
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-23 21:23:00 | 显示全部楼层
真的很迷惑
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-23 22:28:49 | 显示全部楼层
xhhyi 发表于 2013-3-23 13:03
不要这样写,不同编译器会产生不同结果,所以各种情况都有可能,看你用什么编译器了
有些编译器还可能是15 ...

原来是这样子啊,谢谢前辈指点!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 00:01:59 | 显示全部楼层
编译器不同就有可能有着不同的答案,最好把这个问题简化
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 00:41:17 | 显示全部楼层
第一个由于都是i++,所以在输出函数没有执行完成时是不会改变I的值的
第二个如果是22的话,说明三个括号里的值分别是778
如果是24的话,那么就会是编译器将所有的i++优先执行后在相加
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-24 09:40:29 | 显示全部楼层
l万lin 发表于 2013-3-24 00:01
编译器不同就有可能有着不同的答案,最好把这个问题简化

看样子果然是编译器造成的原因呢!不过在以后编程的时候这样乱的语句应该不会总出现的吧!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-24 09:42:02 | 显示全部楼层
shansongh 发表于 2013-3-24 00:41
第一个由于都是i++,所以在输出函数没有执行完成时是不会改变I的值的
第二个如果是22的话,说明三个括号里的 ...

即使是在同一个式子里面 i 的值也会发生变化吗?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 09:56:54 | 显示全部楼层
像这样的问题,自己编程的时候是不会出现的,但是考试确实常常靠这样的内容,所以建议还是彻底搞懂为好,我也不懂。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 10:16:06 | 显示全部楼层
这个问题好像是这样的:就是,i++是先用后加的,而且这个后加是在整个语句结束后再加,就是遇到了  ;  分号之后才加,而++i是先自增再运算,就是说每次遇到++i就会在原来的基础上再加1然后再进行运算,不过不同的编译器还是不同。自己用反编译看一下汇编代码吧,望能解楼主的惑
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 10:39:52 | 显示全部楼层
谁能考出这样的题目,真是脑袋进水!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-24 11:37:31 | 显示全部楼层

RE: C语言新手求助 i++ 这个问题

端坐霜天 发表于 2013-3-24 09:42
即使是在同一个式子里面 i 的值也会发生变化吗?

内容我用vc测试是22
而且根据别人的回答是这个,不过这个结果我也不太理解
知道有这回事就行,没必要纠结。我们自己编程谁用这个???
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-24 22:58:44 | 显示全部楼层
sundaytok 发表于 2013-3-24 10:16
这个问题好像是这样的:就是,i++是先用后加的,而且这个后加是在整个语句结束后再加,就是遇到了  ;  分号 ...

嗯嗯,总之自增自减的原理是弄懂了,以后遇见具体问题再具体分析吧,谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2013-3-24 22:59:18 | 显示全部楼层
shansongh 发表于 2013-3-24 11:37
内容我用vc测试是22
而且根据别人的回答是这个,不过这个结果我也不太理解
知道有这回事就行,没必要纠 ...

嗯嗯,有道理,谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-25 01:22:31 | 显示全部楼层
清风不识字 发表于 2013-3-24 10:39
谁能考出这样的题目,真是脑袋进水!

给你说,考试还真就考你这个(至少我们那个年代就是这样,现在我估计也不会有什么变化)。不管学校的考试还是全国的考试,用什么编译器都是给你指定了的,就考你对使用的编译器理解没有!
我们那个时候教的TC,就考你这样,即便你知道VC得到的不是这个答案!
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2013-3-29 07:18:26 | 显示全部楼层
端坐霜天 发表于 2013-3-24 22:58
嗯嗯,总之自增自减的原理是弄懂了,以后遇见具体问题再具体分析吧,谢谢你!

不客气,我也在探索中,以后大家可以交流啊
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-5 08:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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