C语言如何进行数据类型转换?

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

  • 算术运算中的转换
    在进行算术运算时,C 语言会自动将不同类型的数据转换为同一种类型,转换规则通常是向精度更高的数据类型转换。
    例如,当一个int类型和一个float类型进行加法运算时,int会自动转换为float类型。
    例:
int a = 5; 
float b = 3.5; 
float c = a + b;

在计算a + b时,a会被自动转换为float类型(即 5.0),然后与b相加,得到c的值为 8.5。

  • 赋值运算中的转换
    当把一个表达式的值赋给一个变量时,如果表达式类型和变量类型不一致,会发生隐式转换,不过可能会导致精度损失。
    例如,
float f = 3.14;
int i = f;

这里i的值为 3,因为float类型的3.14在赋值给int类型变量时,小数部分被截断。

2.显式类型转换(强制类型转换)

1. 基本语法及示例(基本数据类型)
基本语法为(目标类型)表达式。

  • 整数和浮点数之间的转换
    例如,将int转换为float:
int num1 = 10; 
float num2 = (float)num1;

此时num2的值为 10.0。
反过来,将float转换为int:

float num3 = 3.9;
int num4 = (int)num3;

num4的值为 3,小数部分被截断。

  • 不同整数类型之间的转换
    例如,将short转换为int:
short s = 20;
int i = (int)s;

i的值为 20。
又如,将long转换为int(要注意范围):

long l = 2147483648L;
int j = (int)l;

由于2147483648L超出了int(通常范围是 - 2147483648 到 2147483647)的范围,j的值可能会因溢出而不正确。
2. 指针类型的转换(有风险)
例如,假设有int类型指针转换为char类型指针。
例:

int *int_ptr = (int *)malloc(sizeof(int)); 
*int_ptr = 10; 
char *char_ptr = (char *)int_ptr;

这里将int_ptr强制转换为char_ptr后,通过char_ptr访问内存是按照char类型字节数(通常为 1 字节)读取,和通过int_ptr按int类型字节数(通常为 4 字节)读取不同,可能导致错误。
3. 函数参数传递中的转换
例如,有函数void print_int(int num),要传入float类型的值。
例:

float f = 3.5; 
print_int((int)f);

这里将float类型的f强制转换为int类型后传入函数,不过可能会丢失数据,因为3.5转换为int后为 3。

猜你喜欢

转载自blog.csdn.net/u011732210/article/details/143403641