C 数据类型转换
看一下段代码, 分析for循环的循环体会执行多少次:
#include<stdio.h> int main(void) { int i; for(i=-1; i < sizeof(int); i++) { printf("%d, ", i); } return 0; }
实验表明, 在不同的编译器下, 这个循环的实现也不一样:
1. 在gcc下, 由于'sizeof(int)'的返回值是'unsigned long int'类型的, 但'i'的类型是'signed int'类型的, 二者在做比较时要将i从'signed int'转换成'unsigned long int', 但由于i原来是有符号的'-1', 转换后变为无符号的'0xffffffff', 当然比'sizeof(int)'大, 结果for循环体一次也没有执行.
2. 在Turbo C下, 由于'sizeof(int)'的返回值是'signed int'类型的(注意: 这不符合C标准的规定), 所以与'i'比较是没有类型转换, for循环体会执行5次.
严重注意: 有些东西了解就行, 以便在出现问题时知道如何解决, 但尽量不要在自己的代码中尝试那些东西.