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