C语言:隐式类型转换与强制类型转换

本文探讨了C语言中两种类型转换方式:强制类型转换和隐式类型转换。强制类型转换可能导致截断,结果受操作系统大小端影响,并非所有转换都是允许的。隐式类型转换在算术运算、赋值、函数调用和返回时发生,从低到高类型转换安全,反之可能产生截断。举例说明了整型提升现象。
摘要由CSDN通过智能技术生成

在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;
}
  • 隐式类型转换(编译器主动进行的类型转换)
    例如:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值