zoukankan      html  css  js  c++  java
  • 第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 }

    运行结果如下:

    小结:

  • 相关阅读:
    lambda表达式
    各种模块化简介及演变过程
    filter-api文档
    RegExp正则表达式规则以及常用正则表达式
    各种循环遍历对比
    条件语句对比
    莫队小结
    停更公告
    POJ2728 Desert King
    笛卡尔树Cartesian Tree
  • 原文地址:https://www.cnblogs.com/wanmeishenghuo/p/9532548.html
Copyright © 2011-2022 走看看