|
网站首页
|
业界新闻
|
小组
|
威客
|
人才
|
下载频道
|
博客
|
代码贴
|
在线编程
|
编程论坛
|
登录
注册
短消息
我发表的主题
我参与的主题
我收藏的贴子
我上传的附件
我下过的附件
编辑个人资料
我的博客
用户控制面板
搜索
道具
恢复默认风格
碧海青天
秋意盎然
棕红预览
粉色回忆
蓝雅绿
紫色淡雅
青青河草
e点小镇
橘子红了
红红夜思
水晶紫色
雪花飘飘
新年快乐
风格
短消息
论坛展区
帮助
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于i++,++i,?:的奇怪问题
我的收件箱(0)
欢迎加入我们,一同切磋技术
用户名:
密 码:
共有
875
人关注过本帖
标题:
关于i++,++i,?:的奇怪问题
只看楼主
加入收藏
stwenfe
等 级:
新手上路
帖 子:35
专家分:0
注 册:2006-3-8
楼主
收藏
问题点数:0 回复次数:9
关于i++,++i,?:的奇怪问题
问题是这样的,在vc下编译运行
i=2;
i=i++;
printf("%d",i);
这时i输出3,没问题
i=2;
i=i?i++:++i;
printf("%d",i);
这时i就输出2了,这是为什么,难道不是i为真,就把i++的值赋给i吗?那就跟上面那个i=i++应该是一样的应该输出3,但是却输出2,这是怎么回事
[[it] 本帖最后由 stwenfe 于 2008-10-24 14:30 编辑 [/it]]
搜索更多相关主题的帖子:
bianyi
2008-10-24 14:13
举报帖子
使用道具
赠送鲜花
dillon
等 级:
新手上路
威 望:
2
帖 子:183
专家分:0
注 册:2008-10-6
第
2
楼
收藏
得分:0
i=i?i++:++i; 若i为真则将i++的值赋予i,而++优先级高于=,所以先进行i++,即表面i=2,(后台i=3;)而i=(i=2);使得i=2 而不是3.
嘿嘿有点拗口.
2008-10-24 15:22
举报帖子
使用道具
赠送鲜花
StarWing83
来 自:仙女座大星云
等 级:
贵宾
威 望:
19
帖 子:3951
专家分:748
注 册:2007-11-16
第
3
楼
收藏
得分:0
i=i++
两个顺序点之间,改变一个变量两次,属于未定义行为。
专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 15:42
举报帖子
使用道具
赠送鲜花
lingluoz
来 自:苏州科技学院
等 级:
新手上路
威 望:
4
帖 子:749
专家分:0
注 册:2008-2-2
第
4
楼
收藏
得分:0
太深奥了。好像关于i++类似题很出的问多啊。。
Murphy's Law :
If there are two or more ways to do something, and one of those ways can result in a catastrophe, then someone will do it.
2008-10-24 15:50
举报帖子
使用道具
赠送鲜花
名扬低调
等 级:
新手上路
帖 子:92
专家分:0
注 册:2008-10-12
第
5
楼
收藏
得分:0
奇怪了,我用的是C-Free4.1 Min GW3.4.5 的编译器
# include"stdio.h"
int main(void)
{
int i;
i=2;
i=i++;
printf("%d",i);
return 0;
}我为什么输出的是"2"?
i++ 在赋值前,没有进行运算,应该i的值还是"2"呀?你的怎么是"3"呢?难道是编译器有差别?
[[it] 本帖最后由 名扬低调 于 2008-10-25 09:33 编辑 [/it]]
无声的坚持或许沉默也是一种执着.! By:名扬低调
变量的指针和指向变量的指针变量.!
2008-10-24 20:19
举报帖子
使用道具
赠送鲜花
hybistr
等 级:
新手上路
帖 子:5
专家分:0
注 册:2008-10-24
第
6
楼
收藏
得分:0
i=2;
i=i?i++:++i;
这要从汇编的角度来看看了
先是把2赋值给i
然后i和0比较
然后把i传到一个寄存器(=2)中,再i++
最后再把寄存器中的2赋值给i
2008-10-24 22:59
举报帖子
使用道具
赠送鲜花
zdyzhang
来 自:栖息地
等 级:
蜘蛛侠
威 望:
4
帖 子:2335
专家分:1227
注 册:2008-9-20
第
7
楼
收藏
得分:0
[bo][un]名扬低调[/un] 在 2008-10-24 20:19 的发言:[/bo]
奇怪了,我用的是C-Free4.1 Min GW3.4.5 的编译器
# include"stdio.h"
int main(void)
{
int i;
i=2;
i=i++;
printf("%d",i);
return 0;
}我为什么输出的是"2"?
i++ 在赋值前,没有进行运算,应该i的值 ...
我的猜想也应该是2,课上老师的理论也是这样的!!
这个自加,自减的问题我到现在都还不懂!真的很容易出错!
悲剧源于生活。
2008-10-25 04:59
举报帖子
使用道具
赠送鲜花
kd0376
等 级:
新手上路
帖 子:92
专家分:0
注 册:2007-12-7
第
8
楼
收藏
得分:0
[bo][un]stwenfe[/un] 在 2008-10-24 14:13 的发言:[/bo]
问题是这样的,在vc下编译运行
i=2;
i=i++;
printf("%d",i);
这时i输出3,没问题
i=2;
i=i?i++:++i;
printf("%d",i);
这时i就输出2了,这是为什么,难道不是i为真,就把i++的值赋给i吗?那就跟上面那个i=i++ ...
先付值,在+1~~
2008-10-25 08:59
举报帖子
使用道具
赠送鲜花
名扬低调
等 级:
新手上路
帖 子:92
专家分:0
注 册:2008-10-12
第
9
楼
收藏
得分:0
问题还么有解决呢
无声的坚持或许沉默也是一种执着.! By:名扬低调
变量的指针和指向变量的指针变量.!
2008-10-26 12:46
举报帖子
使用道具
赠送鲜花
skysky198344
等 级:
新手上路
帖 子:93
专家分:0
注 册:2008-10-27
第
10
楼
收藏
得分:0
支持楼上的,先赋值再加一,也支持上面的,转到寄存器,然后发给printf
2008-10-29 10:15
举报帖子
使用道具
赠送鲜花
10
1/1页
1
快速回复:
关于i++,++i,?:的奇怪问题
数据加载中...
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.018100 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved