一、连系的定义
定义一个连系范例的普通方式为:
union 连系名
{
成员表
};
成员表中含有多少成员,成员的普通方式为: 范例分析符 成员名 成员名的定名应符合标识符的划定。
譬喻:
union perdata
{
int >char office[10];
};
定义了一个名为perdata的连系范例,它含有两个成员,一个为整型,成员名为>
二、连系变量的分析
连系变量的分析和结构变量的分析体式式子类似, 也有三种方式。即先定义,再分析;定义同时分析和间接分析。以perdata范例为例,分析如下:
union perdata
{
int >char officae[10];
};
union perdata a,b; /*分析a,b为perdata范例*/
或应许同时分析为:
union perdata
{ int >char office[10]; }a,b;或间接分析为: union
{ int >char office[10]; }a,b
经分析后的a,b变量均为perdata范例。 它们的内存分配示意图如图7—8所示。a,b变量的长度应即是 perdata 的成员中最长的长度, 即即是
office数组的长度,共10个字节。从图中可见,a,b变量如授予整型值时,只运用了2个字节,而授予字符数组时,可用10个字节。
连系变量的赋值和运用
对连系变量的赋值,运用都只能是对变量的成员举办。 连系变量的成员示意为: 连系变量名.成员名 譬喻,a被分析为perdata范例的变量之后,可运用 a.>[例7.15]设有一个教员与教员通用的表格,教员数据有姓名,年龄,职业,教研室四项。教员有姓名,年龄,职业,班级四项。
编程输入职员数据, 再以表格输入。
main()
{
struct
{
char name[10];
int age;
char job;
union
{
int >char office[10];
} depa;
}body[2];
int n,i;
for(i=0;i<2;i )
{
printf("input name,age,job and department\n");
scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
if(body[i].job=='s')
scanf("%d",&body[i].depa.>else
scanf("%s",body[i].depa.office);
}
printf("name\tage job >for(i=0;i<2;i )
{
if(body[i].job=='s')
printf("%s\t= < %d\n",body[i].name,body[i].age
,body[i].job,body[i].depa.>else
printf("%s\t= < %s\n",body[i].name,body[i].age,
body[i].job,body[i].depa.office);
}
}
本例程序用一个结构数组body来寄放职员数据, 该结构共有四个成员。此中成员项depa是一个连系范例, 这个连系又由两个成员构成,一个为整型量>
在用scanf语句输入时要属意,凡为数组范例的成员,无论是结构成员还是联分析员,在该项前不能再加"&"运算符。如程序第18行中
body[i].name是一个数组范例,第22行中的body[i].depa.office也是数组范例,因而在这两项之间不能加"&"运算符。程序中的第二个for语句用于输入各成员项的值:
本章小结
1. 构造和连系是两种构造范例数据,是用户定义新数据范例的严峻身手。构造和连系有良多的类似之处,它们都由成员构成。成员可以具有分比方的数据范例。成员的示意法子类似。都可用三种体式式子作变量分析。
2. 在结构中,各成员都据有本身的内存空间,它们是同时存在的。一个结构变量的总长度即是实足成员长度之和。在连系中,实足成员不能同时占用它的内存空间,它们不能同时存在。连系变量的长度即是最长的成员的长度。
3. “.”是成员运算符,可用它示意成员项,成员还可用“->”运算符来示意。
4. 结构变量可以作为函数参数,函数也可前往指向结构的指针变量。而连系变量不能作为函数参数,函数也不能前往指向连系的指针变量。但可以运用指向连系变量的指针,也可运用连系数组。
5. 结构定义应许嵌套,结构中也可用结协作为成员,构成构造和连系的嵌套。
6. 链表是一种严峻的数据结构,它便于完成静态的存储分配。本章介绍是单向链表,还可构成双向链表,循环链表等。
版权声明:
原创作品,应许转载,转载时请务必以超链接方式标明文章 原始来由 、作者信息和本声明。否则将深究执法责任。