| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 875 人关注过本帖
标题:关于i++,++i,?:的奇怪问题
只看楼主 加入收藏
stwenfe
Rank: 1
等 级:新手上路
帖 子: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
Rank: 1
等 级:新手上路
威 望:2
帖 子:183
专家分:0
注 册:2008-10-6
收藏
得分: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
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
i=i++
两个顺序点之间,改变一个变量两次,属于未定义行为。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-10-24 15:42
lingluoz
Rank: 2
来 自:苏州科技学院
等 级:新手上路
威 望:4
帖 子:749
专家分:0
注 册:2008-2-2
收藏
得分: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
名扬低调
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2008-10-12
收藏
得分: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
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2008-10-24
收藏
得分:0 
i=2;
i=i?i++:++i;

这要从汇编的角度来看看了
先是把2赋值给i
然后i和0比较
然后把i传到一个寄存器(=2)中,再i++
最后再把寄存器中的2赋值给i

2008-10-24 22:59
zdyzhang
Rank: 9Rank: 9Rank: 9
来 自:栖息地
等 级:蜘蛛侠
威 望:4
帖 子:2335
专家分:1227
注 册:2008-9-20
收藏
得分: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
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2007-12-7
收藏
得分: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
名扬低调
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2008-10-12
收藏
得分:0 
问题还么有解决呢

无声的坚持或许沉默也是一种执着.!  By:名扬低调
变量的指针和指向变量的指针变量.!
2008-10-26 12:46
skysky198344
Rank: 1
等 级:新手上路
帖 子:93
专家分:0
注 册:2008-10-27
收藏
得分:0 
支持楼上的,先赋值再加一,也支持上面的,转到寄存器,然后发给printf
2008-10-29 10:15
快速回复:关于i++,++i,?:的奇怪问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.053435 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved