由于同一内存单元在同一个时刻只能存放其中一种类型的成员,即同一时刻只有一个成员有意义。因此,在同一时刻起作用的成员就是最后一次被赋值的成员。正因如此,不能为共用体的所有成员同时进行初始化,只能对第一个成员进行初始化
采用共用体存储程序中逻辑相关但情况互斥的变量时,使其共享内存空间的好处是除了可以节省内存空间以外,还可以避免因操作失误而引起逻辑上的冲突。
代码展示(部分):
#include<stdio.h>
struct date
{
int year;
int month;
int day;
};
struct marriedstate
{
struct date marryday;
char spousename[20];
int child;
};
struct divorcestate
{
struct date divorceday;
int child;
};
struct widowedstate
{
struct date widowedday;
char spousename[20];
int child;
};
union marritalstate
{
char single[20];
struct marriedstate married;
struct divorcestate divorced;
struct widowedstate widowed;
};
struct person
{
char name[20];
int sex;
int age;
int marryflag;
union marritalstate marital;
};
void input(struct person per[4]);
void output(struct person per[4]);
void selectsex();
void selectmarrital();
int main()
{
struct person per[4];
input(per);
output(per);
return 0;
}
未给出相应子函代码展示;
代码分析:
建立的几处结构体,且涉及结构体之间的嵌套。
最后都放在了共用体内便于节省内存空间且逻辑清晰,更凸显代码的功能性。
union marritalstate
{
char single[20];
struct marriedstate married;
struct divorcestate divorced;
struct widowedstate widowed;
};
之后的子函一般应用语句为:
如:
per[i].marital.divorced.divorceday.day=day;