类型之间的转换:程序员
int main() { long l = 800; int i = (int) l; return 0; }
int main() { int i = 280; char a = i; return 0; }
强制类型转换的结果:函数
注意: 并非全部的类型都能进行强制转换
例子:3d
#include <stdio.h> struct TS { int i; int j; }; struct TS ts; int main(int argc, char const *argv[]) { short s = 0x1122; char c = (char)s; // 0x22 int i = (int)s; // 0x00001122 int j = (int )3.1415; // 3 unsigned int p = (unsigned int )&ts; // long l = (long )ts; // error // ts = (struct TS)l; // error printf("s = %x\n",s); printf("c = %x\n",c); printf("i = %x\n",i); printf("j = %x\n",j); printf("p = %x\n",p); printf("&ts = %p\n",&ts); return 0; }
结果:
code
隐式类型转换
编译器主动进行的类型转换blog
隐式类型转换的发生点编译器
#include <stdio.h> int main(int argc, char const *argv[]) { char c = 'a'; int i = c; unsigned int j = 0x11223344; short s = j; printf("c = %c\n",c); printf("i = %d\n",i); printf("j = %x\n",j); printf("s = %x\n",s); printf("sizeof(c+s) = %d\n",sizeof(c+s)); return 0; }
结果:
io
注: 标准的C语言编译器的类型检查是比较宽松的,所以
隐式类型转换可能带来意外的错误。编译