• 十三、结构类型(5)——联合


    自定义类型(typedef)

    (1)C语言提供了一个叫做typedef的功能来声明一个已有的数据类型的新名字。比如:

    typedef  int  Length;    

    使得Length成为int 类型的别名。

    (2)这样,Length这个名字就可以代替 int 出现在变量定义和参数声明的地方了:

    Length  a,b,len;
    Length  numbers[10];

    Typedef

    声明新的类型的名字

    ——新的名字是某种类型的别名

    ——改善了程序的可读性

    typedef long int64_t;  //重载已有类型的名字,新名字的含义更清晰,具有可移植性
    
    int64_t  i=1000000000; 
    typedef struct ADate{
        int month;
        int day;
        int year;
    } Date;  //简化了复杂的名字 
    typedef int Length;  //Length就等价于int类型
    typedef *char[10] String;  //String是10个字符串的数组的类型
    typedef struct node{
        int data;
        struct node *next;
    } aNode;     //这样用aNode就可以代替struct node 

    typedef struct  node aNode;  //这样用aNode就可以代替struct node 

    联合

    union AnElt{
        int i;
        char c;
    } elt1,elt2;
    
    elt.i=4;
    elt2.c='a';
    elt2.i=0xDEADBEEF 

    (1)存储

    ——所有的成员共享一个空间

    ——同一时间只有一个成员是有效的

    ——union的大小是其最大的成员

    (2)初始化

    ——对第一个成员做初始化

    union自己并不知道当时其中哪个成员是有效的
    程序怎么知道当时elt1和elt2里面到底是int 还是 char?

    最好的答案:另一个变量来表达这个事情。

    union的用处

    #include<stdio.h>
    
    typedef union{
        int i;
        char ch[sizeof(int)];
    }CHI; 
    
    int main()
    {
        CHI chi;
        int i;
        chi.i=1234;
        for(i=0;i<sizeof(int);i++)
        {
            printf("%02hhX",chi.ch[i]);
        }
        
        return 0;
    }

    这个结果表明我们所用的CPU是小端的。

  • 相关阅读:
    leetcode练习:26. Remove Duplicates from Sorted Array
    leetcode练习:11. Container With Most Water
    leetcode练习:5. Longest Palindromic Substring
    leetcode练习:2.Add Two Numbers
    算法笔记:分治
    (排序回顾)快速排序
    (排序回顾)归并排序
    leetcode练习:2017/09/21~09/22
    算法笔记:递归&迭代
    在Treeview中节点的data属性中保存记录类型及其消除的办法
  • 原文地址:https://www.cnblogs.com/Strugglinggirl/p/9080200.html
Copyright © 2020-2023  润新知