78.类型转换
78.C语言中的类型转换
C 语言里只有两大类:
- 隐式类型转换(自动转)
- 强制类型转换(手动强转)
没有 C++ 那四种 static_cast、dynamic_cast 等。
1. 隐式类型转换(自动转换)
编译器自动帮你转,不用写代码。
常见场景:
-
算术转换(整型提升 + usual arithmetic conversions)
- char、short → int
- 小类型 + 大类型 → 统一转成大类型
char c = 1; int i = 2; i + c; // c 先提升为 int -
赋值转换
int i = 3.14; // double → int(丢精度) -
函数参数转换
实参自动转成形参类型
void f(int x); f(3.14); // double → int -
返回值转换
return 表达式自动转函数返回类型
2. 强制类型转换(手动强转)
语法:
(目标类型) 表达式
例如:
double pi = 3.14;
int a = (int)pi;
int x = 65;
char c = (char)x;
典型用途:
-
数值类型之间强转
-
指针之间强转(非常常用,也很危险)
int a = 0x12345678; char *p = (char *)&a; -
void*转具体指针
void *p = malloc(4); int *ip = (int *)p;
3. C 语言强转特点
- 只有一种写法:(类型) 值
- 什么都能转:int ↔ float、指针 ↔ 整数、任意指针互转
- 不做安全检查,转错直接炸
- 编译期完成,没有运行时开销
4. 和 C++ 转换的区别
- C:只有
(type)一种暴力强转 - C++:细分
static_cast / const_cast / reinterpret_cast / dynamic_cast,更规范、更安全
一句话总结
C 语言只有隐式自动转换和 (类型) 强制转换;
强转万能但粗暴,不检查安全性,什么都能硬转。

浙公网安备 33010602011771号