第4课 类型转换

C语言中有很多数据类型,这些类型之间可以相互转换吗?

C语言中的数据类型可以进行转换

  1、强制类型转换

  2、隐式类型转换

强制类型转换:

示例如下:

 1 #include <stdio.h>
 2 
 3 struct TS
 4 {
 5     int i;
 6     int j;
 7 };
 8 
 9 struct TS ts;
10 
11 int main()
12 {
13     short s = 0x1122;
14     
15     char c = (char)s;    // 0x22
16     
17     int i = (int)s;      // 0x00001122
18     
19     int j = (int)3.1415; // 3
20     
21     unsigned int p = (unsigned int)&ts;
22     
23     long l = (long)ts;   // error
24     
25     ts = (struct TS)l;   // error
26     
27     printf("s = %x
", s);
28     printf("c = %x
", c);
29     printf("i = %x
", i);
30     printf("j = %x
", j);
31     printf("p = %x
", p);
32     printf("&ts = %p
", &ts);
33     
34     return 0;
35 }

15行的转换产生截断留下0x22,19行的强制类型转换直接将小数部分扔掉,留下整数部分。21行的转换在32位机器上不会产生截断,在64位机器上会产生截断。

23行会产生错误,在C语言中,自定义类型是不能转换为基本类型的。基本类型也不能转换为自定义类型,所以25行也是错误的。

注释掉错误行,运行结果如下:

隐式类型转换:

隐式类型转换的发生点:

隐式类型转换实例分析:

 1 #include <stdio.h>
 2 
 3 int main()
 4 {
 5     char c = 'a';
 6     
 7     int i = c;    // safe
 8     
 9     unsigned int j = 0x11223344;
10     
11     short s = j;  // unsafe
12     
13     printf("c = %c
", c);
14     printf("i = %d
", i);
15     printf("j = %x
", j);
16     printf("s = %x
", s);
17     printf("sizeof(c + s) = %d
", sizeof(c + s));
18     
19     return 0;
20 }

运行结果如下:

小结:

原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9532548.html