This commit is contained in:
许大仙 2024-08-28 13:21:56 +08:00
parent 236cb5557e
commit e11707a667

View File

@ -1593,6 +1593,54 @@ int main(){
}
```
### 1.7.4 数据类型转换只是临时性的
* 无论是自动类型转换还是强制类型转换,都是为了本次运算而进行的临时性转换,其转换的结果只会保存在临时的内存空间,并不会改变数据原先的类型或值,如下所示:
```c {8}
#include <stdio.h>
int main() {
double total = 100.12; // 总价
int count = 2; // 总数
double price = 0.0; // 单价
int totalInt = (int)total; // 强制类型转换
price = total / count; // 计算单价
printf("total = %.2lf\n", total); // total = 100.12
printf("totalInt = %d\n", totalInt); // totalInt = 100
printf("price = %.2lf\n", price); // price = 50.06
return 0;
}
```
* 虽然 `total` 变量,通过强制类型转换变为了 `int` 类型,才可以赋值给 `totalInt`变量;但是,这种转换并没有影响 `total` 变量本身的`类型`和`值`。
> [!NOTE]
>
> * ① 如果 `total` 变量的`值`或`类型`变化了,那么 `total` 的显示结果,就应该是 `100.00` ,而不是 `100.12`
> * ② 那么,`price` 的结果,显而易见就应该是 `50.00` ,而不是 `50.06` 了。
### 1.7.5 自动类型转换 VS 强制类型转换
* 在 C 语言中,有些数据类型即可以自动类型转换,也可以强制类型转换,如:`int --> double`、`double --> int` 等。但是,有些数据类型只能强制类型转换,不能自动类型转换,如:`void* --> int*` 。
* 可以自动类型转换的类型一定可以强制类型转换;但是,可以强制类型转换的类型却不一定能够自动类型转换。
> [!NOTE]
>
> * ① 目前学习到的数据类型,既可以自动类型转换,也可以强制类型转换。
> * ② 后面,如果学到指针,就会发生指针有的时候,只能强制类型转换却不能自动类型转换;需要说明的是,并非所有的指针都可以强制类型转换,是有条件的,后文讲解。
* 可以自动类型转换的类型,在发生类型转换的时候,一般风险较低,不会给程序带来严重的后果,如:`int --> double` 就没什么毛病,而 `double --> int` 无非丢失精度而已。但是 ,只能强制类型转换的类型,在发生类型转换的时候,通常风险较高,如:`char* --> int*` 就非常奇怪,会导致取得的值也很奇怪,进而导致程序崩溃。
> [!IMPORTANT]
>
> * ① 在实际开发中,如果使用 C 语言进行开发,在进行强制类型转换的时候,需要小心谨慎,防止出现一些奇怪的问题,进而导致程序崩溃!!!
> * ② 现代化的高级编程语言Java 等,直接屏蔽了指针。所以,在使用这些编程语言的时候,无需担心进行强制类型转换时,会出现一些奇怪的问题,进而导致程序崩溃!!!
## 1.8 再谈数据类型
* 通过之前的知识我们知道CPU 是直接和内存打交道的CPU 在处理数据的时候会将数据临时存放到内存中。内存那么大CPU 是怎么找到对应的数据的?