Union

来源:互联网 发布:apache storm官方文档 编辑:程序博客网 时间:2024/06/02 20:18
/*
一、定义:
有时需要使几种不同类型的变量存放在同一段内存单元中。
虽然在同一段内存中不同数据类型所占字节数不同,
但都从同一地址开始存放,也就是使用了覆盖技术,几个变量互相覆盖。
这种使几个不同的变量共占一段内存的结构,称为共同体类型的结构(也称为联合类型)。 
二、关键点:
1.当数据项使用2种或多种形式(但是不会同时使用的时候),可节省空间。 
2.内存长度等于最长的成员的长度
3.能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用
4.共同体变量的地址和它的各成员的地址相同,为同一个地址。
*/
struct {         //声明匿名的结构体
char job;
union P {      //声明共用体类型
int grade;       //年级
char position[10]; //科目 
}category;       //成员category为共用体变量

}person[2];         //定义共用体数组person,含两个元素(个人认为就是结构体类型变量)


int main(){
for(int i=0;i<2;i++){
cin>>person[i].job;
if(person[i].job=='s'){
 cin>>person[i].category.grade;
}else if(person[i].job=='t'){
  cin>>person[i].category.position;
}
}
for(int i=0;i<2;i++){
if(person[i].job=='s'){
cout<<person[i].job<<setw(10)<<person[i].category.grade<<endl;
}else{
cout<<person[i].job<<setw(10)<<person[i].category.position<<endl;
}
}
return 0;
}
/* 
input: 
s 98
t math
*/
原创粉丝点击