十三、结构类型(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是小端的。

 

posted @ 2018-05-23 23:01  Strugglinggirl  阅读(220)  评论(0编辑  收藏  举报