这个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)。
#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)。