标题:为什么结果是0
只看楼主
d2567264697
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-3-8
结帖率:100%
已结贴  问题点数:20 回复次数:8 
为什么结果是0
程序代码:
#include<stdio.h>

int main()
{
    char i=0;
    char j=8;
    for(;j>0;j--) i=i++;
    printf("%d",i);
    return 0;
}
搜索更多相关主题的帖子: char 结果 return i++ printf 
2020-03-08 14:53
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2276
专家分:10647
注 册:2015-3-19
得分:3 
自增运算,两加号在前是先运算再赋值,两加号在后面是先赋值再运算

剑栈风樯各苦辛,别时冰雪到时春
2020-03-08 15:26
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:3 
先将i(0)的值作为i++表达式的值,再将i加1(i=1)。然后再将i++表达式的值也就是i(0)赋给i,得到i=0。然后再进入下一循环,最后i=0.

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2020-03-08 17:01
yuma
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:银河系
等 级:贵宾
威 望:33
帖 子:1883
专家分:2904
注 册:2009-12-22
得分:3 
结果为8

心生万象,万象皆程序!
本人计算机知识网:http://bbs.为防伸手党,本站已停止会员注册。
2020-03-08 17:18
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
i=i++; 这种表达方式有点无理头
想表达i=i+1就++i好了
2020-03-08 17:30
自学的数学
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:46
帖 子:967
专家分:4146
注 册:2017-11-15
得分:3 
i++和++i是C语言运算符,i++是后缀递增的意思,++i是前缀递增的意思。
1、i++是后缀递增的意思,i++是先进行表达式运算,再进行自增运算。把i++的运算过程拆分开,等效于i=i+1可以看到运算结果是一致的。
x = i ++;    //先让x变成i的值1,再让i加1
2、++i是前缀递增的意思,++i是先进行自增或者自减运算,再进行表达式运算。运算结果可以发现,仅从i的值来看,++i和i++最终的i值是一样的,都是i自增加了1。
x = ++i;    //先让i加1, 再让x变成i的值1
2020-03-08 17:33
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:3 
以下是引用d2567264697在2020-3-8 14:53:36的发言:

#include<stdio.h>

int main()
{
    char i=0;
    char j=8;
    for(;j>0;j--) i=i++;
    printf("%d",i);
    return 0;
}

咱先不说char类型到int类型的隐式转换
光回答你的问题,为什么i会等于0
很显 for(;j>0;j--) i=i++;     这一句计算好会直接跳过因为j已经是0了?0会大于0吗?不会的,所以会直接跳过
至于++和这题无关,当然科普一下也是不错的
既然for(;j>0;j--) i=i++;这一句已经跳过了
那这串代码实际为char i=0;printf("%d",i);

所以楼主已经定义初始化了i为0,所以打印出来的i也为0

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-03-08 17:58
吕孟伟
Rank: 8Rank: 8
等 级:贵宾
威 望:27
帖 子:200
专家分:870
注 册:2018-10-4
得分:3 
回复 7楼 叶纤
程序代码:
#include<stdio.h>

int main()
{
    char i=0;
    char j=8;
    for(;j>0;j--){
        i=i++;
        printf("%d",i);
        
    } 
    printf("\n");
    printf("%d",i);
    return 0;
}

代码输出:
00000000
0

可以看出j初始是8,循环了8次,并不是因为j=0,退出循环的。

借用一下侯捷的话:勿在浮沙筑高台。
2020-03-08 19:07
forever74
Rank: 12Rank: 12Rank: 12
来 自:CC
等 级:贵宾
威 望:49
帖 子:1636
专家分:3940
注 册:2007-12-27
得分:3 
这个代码在新冠基金会的屋檐左边又蒸发了三次。







你知道我在说什么吗?
对,这就是未定义行为。
语法正确但没有意义。

对宇宙最严谨的描述应该就是宇宙其实是不严谨的
2020-03-08 19:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-499632-1-1.html




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

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