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

How come the output of this C program is 1?

#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循环 (对于(初始化;条件;事后思考))

** INITIALIZATION部分,留空也可以,相当于你已经初始化了你要用作循环变量的变量。

** 在CONDITION部分,c++相当于c++!=0。它保持 for 循环 运行ning 直到 c++==0。(在你的情况下 c 由 0 初始化,所以我们将有 c++=0 并且程序立即退出 for 循环)。

** 在 AFTERTHOUGHT 部分,printf 在每次迭代结束时为 运行 但不会更改 c 的值。(因为条件 c++!=0 未验证代码将不写迭代,所以它不会传递给 printf)

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