这个C程序的输出怎么是1?

Nishanthan Ravichandran
#include <stdio.h>

int main() {
    unsigned char c = (int) 0.54;
    for(; c++; printf("%d", c));

    printf("%d", c);
    return 0;
}

当我运行程序时,输出显示为1

输出怎么可能是1?提前致谢

国王

在第一行 - unsigned char c=(int)0.54;char 实际上存储了字符的 ASCII 代码,因此以另一种方式它是一个整数,它以这种方式存储数据:编译器将存储到字符中的数字从十进制数字系统转换为二进制数字系统,并考虑到只有该数字右侧的前 8 位以二进制表示。(我们不需要考虑负数的情况,因为您使用无符号字符)-因此变量c在末尾取 0 作为值这条线。

对于代码的第二行 - for(;c++;printf("%d",c));:所以我们有一个 for 循环( for (INITIALIZATION; CONDITION; AFTERTHOUGHT))

** 在 INITIALIZATION 部分,将其留空很好,这相当于您已经初始化了要用作循环变量的变量。

** 在 CONDITION 部分,c++ 等价于 c++!=0。它使 for 循环一直运行直到 c++==0。(在您的情况下, c 由 0 初始化,因此我们将拥有 c++=0 并且程序立即退出 for 循环)。

** 在 AFTERTHOUGHT 部分,printf 在每次迭代结束时运行,但不会改变 c 的值。(由于条件 c++!=0 未验证代码不会编写迭代,因此不会传递给 printf)

printf("%d",c);将显示 1(循环中的 c++ 用作条件,同时将变量 c 递增 1;c++ 后增量运算符使用“use-then-change”原则,因此,c 在退出后恰好递增 1 for 循环,并且 c 等于 1)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章