在C语言中,进行类型之间的转换有两种转换方式: 强制类型转换与隐式类型转换
- 强制类型转换
语法:(目标类型)变量名或者具体的数值
结果:1、目标类型能够容纳目标值,结果不变
2、目标类型不能容纳目标值,结果产生截断
注意:结果产生截断与操作系统的大小端有关;并不是所有的强制类型转换都能够成功,当不能进行强制类型转换时,编译器会产生错误信息。
例如:
struct S
{
int a;
int b;
};
struct S s;
int main()
{
short t = 0x1122;
char i = (char)t;//0x22,将short转换为char类型,发生了高位截断
int a = (int)t;//0x00001122,将低类型(容量小)的类型转换为高类型,将高位填充0
int b = (int)3.1415;//3,将浮点型数值转换为整数类型,将小数点后的所有数截断
unsigned int p = (unsigned int)&s;//将s结构体类型取地址值转换为无符号整形,32位正常,64位截断因为在32位情况下地址值为4个字节,在64位下为8个字节
long l = (long)s;//错误,因为在C语言中不能将自定义类型转换为内置类型
s = (struct S)l;//错误,在C语言中不能将内置类型转换为自定义类型
system("pause");
return 0;
}
- 隐式类型转换(编译器主动进行的类型转换)
例如: