一、C 语言中的类型转换
1、C 语言类型转换简介
C 语言中 , 类型转换 是常用操作 , 借助该机制 , 将不同数据 的 数据类型 进行转换 ;
C 语言类型转换种类 : 主要是 静态类型转换 ( 隐式类型转换 ) 和 动态类型转换 ( 显式类型转换 ) ;
- 静态类型转换 , 又称为 " 隐式类型转换 " , 在 编译器 编译时 进行类型转换 , 无需明确指定转换操作 , 自动地从一种类型转换为另一种类型 ; 如 : 函数传递时 , 接收 double 类型 , 传入 int 类型数据会自动转为 double 类型 ; 将 int 类型赋值给 float 变量 , 会被自动转为 float 类型 ;
int a = 1;
float b = 2.5;
// 1. 静态类型转换 示例
// 计算时 a 变量会被转为 float 类型 , 与 b 进行加法计算
float c = a b;
// 输出 : 3.500000
printf("c = %fn", c);
- 动态类型转换 , 又称为 " 显式类型转换 / 强制类型转换 " , 开发者需要明确指定转换类型 , 该转换是在 程序运行时 进行的转换 ;
int a = 1;
float b = 2.5;
// 2. 动态类型转换 示例
// float 类型 的 b 变量 被显式地转换为 int 类型
int d = (int) b;
// 输出 : 2
printf("d = %dn", d);
2、代码示例 - C 语言类型转换
代码示例 :
代码语言:javascript复制#include <stdio.h>
int main() {
int a = 1;
float b = 2.5;
// 1. 静态类型转换 示例
// 计算时 a 变量会被转为 float 类型 , 与 b 进行加法计算
float c = a b;
// 输出 : 3.500000
printf("c = %fn", c);
// 2. 动态类型转换 示例
// float 类型 的 b 变量 被显式地转换为 int 类型
int d = (int) b;
// 输出 : 2
printf("d = %dn", d);
return 0;
}
执行结果 :
代码语言:javascript复制c = 3.500000
d = 2
二、C 类型转换
1、C 中 4 种类型转换操作符
C 中提供了 四种 类型转换操作符 :
- 静态类型转换 static_cast : 在编译时进行 , 将一种数据类型安全地转换为另一种数据类型 , 转换前提是在编译时两个数据类型已知 ;
// 静态类型转换 整型 -> 浮点型
int num = 10;
float fnum = static_cast<float>(num);
- 重新解释类型 reinterpret_cast : 对指针变量 , 引用变量进行原始的转换 , 即将地址值转成对应的类型 ;
// 重新解释类型 char* 指针类型 -> int* 指针类型
char* hello = "Hello";
//获取 hello 字符串地址 , 将其转为 int 类型
int hello_address = reinterpret_cast<int> (&hello);
- 动态类型转换 dynamic_cast : 父类 ( 对象 / 指针 / 引用 ) 和 子类 ( 对象 / 指针 / 引用 ) 之间的转换 , 是 C 语言特有的 , C 语言中没有该转换类型 ;
- 常量转换 const_cast : 只针对 C 常量 , 将 常量转为变量 或 将 变量转为常量 ;
2、C 语言和 C 常量原理本质
C 语言常量 和 C 常量原理 参考 【C 】C 语言 和 C 语言中 const 关键字分析 ( const 关键字左数右指原则 | C 语言中常量的原理和缺陷 | C 语言中常量原理 - 符号表存储常量 ) 博客 ;
- C 语言常量 本质是 内存中的一块空间 , 可以通过 & 获取地址修改 ;
- C 常量 本质是 创建了一个符号表区域 , 使用键值对形式存储常量值 ;
3、C 语言和 C 类型转换联系
C 中的 静态类型转换 static_cast 和 重新解释类型 reinterpret_cast 对应 C 语言中的 强制类型转换 ,
C 中的 动态类型转换 dynamic_cast 和 常量转换 const_cast 是 C 独有的 , 因为 C 语言中没有 子类父类 继承概念 , C 中的常量的本质 与 C 语言也是不同的 ;