78.类型转换

78.C语言中的类型转换

C 语言里只有两大类:

  1. 隐式类型转换(自动转)
  2. 强制类型转换(手动强转)

没有 C++ 那四种 static_castdynamic_cast 等。

1. 隐式类型转换(自动转换)

编译器自动帮你转,不用写代码。

常见场景:

  1. 算术转换(整型提升 + usual arithmetic conversions)

    • char、short → int
    • 小类型 + 大类型 → 统一转成大类型
    char c = 1;
    int  i = 2;
    i + c;   // c 先提升为 int
    
  2. 赋值转换

    int i = 3.14;  // double → int(丢精度)
    
  3. 函数参数转换

    实参自动转成形参类型

    void f(int x);
    f(3.14);       // double → int
    
  4. 返回值转换

    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 语言只有隐式自动转换和 (类型) 强制转换;

强转万能但粗暴,不检查安全性,什么都能硬转。

posted @ 2023-03-29 21:56  CodeMagicianT  阅读(136)  评论(0)    收藏  举报