共同(用)体
一种数据可能有多种数据类型
共用体,也叫联合体,共同体
所有的变量都使用同一个内存空间
所占的内存大小=最大成员的长度(也受内存对齐影响)
内存对齐:一定是最大成员的单个成员的长度的整数倍
当定义了数组时,数组是拆分计算长度的
每次只能给一个变量进行赋值,因为第二次赋值时会覆盖原有的数据
#include<stdio.h> #include<string.h> //定义共同体,包含整数,小数,字符串3种类型 typedef union Money { //这里他的最大单个长度是double,所有占用空间是double的整数倍, //最大成员是moneystr[100],所以需要填补4个空白字节到104,才是8的整数倍 int moneyi; double moneyd; char moneystr[100]; }M; int main() { //分别存入3种数据类型 //占用同一个内存空间,所以新定义会覆盖旧的 M money; money.moneyi = 100; printf("%d\n",money.moneyi); money.moneyd = 100.111; printf("%lf\n",money.moneyd); strcpy(money.moneystr,"100万"); printf("%s\n",money.moneystr); //3个变量占用同一个内存空间 printf("%p\n",&money.moneyi); printf("%p\n",&money.moneyd); printf("%p\n",&money.moneystr); //长度为104 printf("%d\n",sizeof(money)); return 0; }
结构体和共同(用)体的区别
结构体:
一种事物中包含多个属性
存储方式: 各存各的
内存占用: 各个变量的总和(受内存对齐影响)
共同体:
一个属性有多种类型
存储方式: 存一起,多次存会覆盖
内存占用: 最大类型(受内存对齐影响)