|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 求教一个关于i++的问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
1294
人关注过本帖
标题:
求教一个关于i++的问题
只看楼主
加入收藏
burningbebe
等 级:
论坛游民
帖 子:41
专家分:19
注 册:2009-10-31
结帖率:
100%
楼主
收藏
已结贴
√
问题点数:10 回复次数:14
求教一个关于i++的问题
#include <stdio.h>
main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,i,q,j)
}
各位朋友 能告诉我 这个答案是多少吗
我的编译器得出来的是 15,8,22,8。
可是书上的理论值是15,8,24,8。
我用的编译器是gcc 这是怎么回事啊
他的计算原理是什么
——— —个菜鸟
搜索更多相关主题的帖子:
编译器
朋友
2009-11-17 14:36
举报帖子
使用道具
赠送鲜花
lhl198989
等 级:
论坛游民
帖 子:16
专家分:67
注 册:2009-9-12
第
2
楼
收藏
得分:10
回复帖:
像p=i++ + i++ + i++这种语句的实现是依赖于具体的编译器实现的,因为这是C标准所明确定义为非法的例子。标准的原话是:“在上一个和下一个序列点之间,一个对象所保存果的值至多只能被表达式的求值修改一次。而且只有在确定将要保存的值的时候才能访问前一个值。”
这两句化的意思是,在一个表达式中,一个变量只能被修改一次,像i=i++这样的语句是非法的。而且标准还禁止了像a[i]=i++这样在同一个表达式中边引用边修改的语句。但是在具体的编译器中,这样的语句可能合法,而且能够通过编译,但是得到的结果可能和我们预料的有很大区别,所以像这样非法的语句,我的建议是尽量不要用,除非你想深入观察你的编译器的具体实现。所以上面两种答案都对,最后,如果你的C语言教材没能指出这种用法的错误,那么我再联系你尽快换一本好点的教科书。
2009-11-17 16:57
举报帖子
使用道具
赠送鲜花
yinfuyong
等 级:
论坛游民
帖 子:35
专家分:45
注 册:2009-10-31
第
3
楼
收藏
得分:0
这种问题比较闹心,其实就那么回事,明明不是自己的问题,lz相信自己
2009-11-17 20:28
举报帖子
使用道具
赠送鲜花
hyfl
来 自:火星
等 级:
黑侠
帖 子:113
专家分:552
注 册:2008-11-20
第
4
楼
收藏
得分:0
yun
“一切高手都是从菜鸟炼成的!”1099285180@
2009-11-20 01:40
举报帖子
使用道具
赠送鲜花
silent325
等 级:
新手上路
帖 子:2
专家分:0
注 册:2009-11-15
第
5
楼
收藏
得分:0
原来是这样的,学习了!
2009-11-22 00:31
举报帖子
使用道具
赠送鲜花
zdhppl
等 级:
新手上路
帖 子:1
专家分:0
注 册:2009-11-7
第
6
楼
收藏
得分:0
哦 谢谢 楼主和2楼的 我也有这种类似的疑问~ ~
像楼主给的 这段程序
我运行就有错误
#include <stdio.h>
main()
{
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,i,q,j)
}
s.obj - 1 error(s), 0 warning(s)
2009-11-22 10:24
举报帖子
使用道具
赠送鲜花
viky2003
等 级:
职业侠客
帖 子:375
专家分:383
注 册:2007-4-11
第
7
楼
收藏
得分:0
简单的来说:
a+b+c的求值过程中,只规定了:要先求前面加号的值再求后面加号。
可是没有规定,是先求a的值还是b或者c的。
这样的行为是未定义的。
要练习算法就来http:///!!有挑战哦!!
2009-11-22 10:41
举报帖子
使用道具
赠送鲜花
jcslt
来 自:90-xx.com
等 级:
蝙蝠侠
帖 子:251
专家分:975
注 册:2009-10-10
第
8
楼
收藏
得分:0
#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,i,q,j);
}
这个结果才是15,8,24,8.也就是说q的运算先后问题,LZ的程序q=(7+7)+8,先计算(++j)+(++j)然后再第三个++j
www.
2009-11-22 10:49
举报帖子
使用道具
赠送鲜花
xiefeng122
等 级:
论坛游侠
帖 子:126
专家分:139
注 册:2009-4-1
第
9
楼
收藏
得分:0
回复 2楼 lhl198989
恩··受教了
2009-11-22 10:53
举报帖子
使用道具
赠送鲜花
jcslt
来 自:90-xx.com
等 级:
蝙蝠侠
帖 子:251
专家分:975
注 册:2009-10-10
第
10
楼
收藏
得分:0
不同的编译器还是有很大区别的,不同的教材也是根据不同的编译器而写的
www.
2009-11-22 10:53
举报帖子
使用道具
赠送鲜花
15
1/2页
1
2
快速回复:
求教一个关于i++的问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.025364 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved