注册 登录
编程论坛 C语言论坛

为什么结果是0

d2567264697 发布于 2020-03-08 14:53, 1848 次点击
程序代码:
#include<stdio.h>

int main()
{
    char i=0;
    char j=8;
    for(;j>0;j--) i=i++;
    printf("%d",i);
    return 0;
}
8 回复
#2
林月儿2020-03-08 15:26
自增运算,两加号在前是先运算再赋值,两加号在后面是先赋值再运算
#3
纯蓝之刃2020-03-08 17:01
先将i(0)的值作为i++表达式的值,再将i加1(i=1)。然后再将i++表达式的值也就是i(0)赋给i,得到i=0。然后再进入下一循环,最后i=0.
#4
yuma2020-03-08 17:18
结果为8
#5
吹水佬2020-03-08 17:30
i=i++; 这种表达方式有点无理头
想表达i=i+1就++i好了
#6
自学的数学2020-03-08 17:33
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
#7
叶纤2020-03-08 17:58
以下是引用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
#8
吕孟伟2020-03-08 19:07
回复 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,退出循环的。
#9
forever742020-03-08 19:38
这个代码在新冠基金会的屋檐左边又蒸发了三次。







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