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\n", s);
28     printf("c = %x\n", c);
29     printf("i = %x\n", i);
30     printf("j = %x\n", j);
31     printf("p = %x\n", p);
32     printf("&ts = %p\n", &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\n", c);
14     printf("i = %d\n", i);
15     printf("j = %x\n", j);
16     printf("s = %x\n", s);
17     printf("sizeof(c + s) = %d\n", sizeof(c + s));
18     
19     return 0;
20 }

运行结果如下:

 

小结:

 

posted on 2018-08-25 00:12  周伯通789  阅读(216)  评论(0编辑  收藏  举报