共用体的结构与结构体的结构类似,但是它的所有成员变量,都只有一个起始地内存地址,储存在同一段内存中。
这样导致的结果就是,你每次只能给一个变量赋值,就算给其他变量赋值,它就会覆盖上一个变量的值。
刚开始的时候理解,很难受,不习惯这种方式,现在想通;对此还是拿代码说;
/*
* 测试共用体
* Created on: 2016年12月22日
* Author: chenkui
*/
#include <iostream>
#include <string.h>
using namespace std;
union pos_union{
char pos[10];
int grade;
}persion1={"teacher"};
int main(int argc, char **argv) {
pos_union persion2;
strcpy(persion2.pos,"teacher+++");
// persion2.grade=3;
cout<<"persion1.pos:=="<<persion1.pos<<endl;
cout<<"persion1.grade:=="<<persion1.grade<<endl;
cout<<"persion2.pos:=="<<persion2.pos<<endl;
cout<<"persion2.grade:=="<<persion2.grade<<endl;
return 0;
}
结果如下:
persion1.pos:==teacher
persion1.grade:==1667327348
persion2.pos:==teacher+++
persion2.grade:==1667327348
此时发现,persion2覆盖了persion1, persion1.grade与persion2.grade显示值相同,说明它是无效的。
在此将代码改变如下:
/*
* 测试共同体
* Created on: 2016年12月22日
* Author: chenkui
*/
#include <iostream>
#include <string.h>
using namespace std;
union pos_union{
char pos[10];
int grade;
}persion1={"teacher"};
int main(int argc, char **argv) {
pos_union persion2;
strcpy(persion2.pos,"teacher+++");
persion2.grade=3;
cout<<"persion1.pos:=="<<persion1.pos<<endl;
cout<<"persion1.grade:=="<<persion1.grade<<endl;
cout<<"persion2.pos:=="<<persion2.pos<<endl;
cout<<"persion2.grade:=="<<persion2.grade<<endl;
return 0;
}
结果如下:
persion1.pos:==teacher
persion1.grade:==1667327348
persion2.pos:==
persion2.grade:==3
和上面的结果对比发现,此时,发现只有persion2.grade有值,persion2.pos原来是teacher+++,变成了无效值,什么都没有输出。
在此,得出一个结论,无论共同体怎末赋值,始终在最后面的变量覆盖上一个变量,只有一个结果输出