1、共用体的用法:
#include<stdio.h>
union data{
int a;
char b;
};
int main(){
union data data_1;
data_1.b ='C';
data_1.a=10;
printf("%d\n%d\n",data_1.a,data_1.b);
return 0;
}
输出结果:
linux@ubuntu:~/workspace2/les3$ ./a.out
10
10
共用体的总长度是里面最长元素的长度;
共用体的最后的赋值语句才有效,前面的都被覆盖了,而且输出的格式只能是最长元素的格式,比如上面printf中的格式都是%d;
验证:
printf("%p\n%p\n",&data_1.a,&data_1.b);//%p输出地址;
输出结果:
linux@ubuntu:~/workspace2/les3$ ./a.out
0xbf9bb04c
0xbf9bb04c
2、共用体与结构体的区别:
结构体的总长度:
不是所有成员变量大小的和,而是 = 最后一个成员变量的偏移量 + 最后一个成员变量的大小 + 上末尾的填充字节数;
且总长度必须是最长变量的整数倍,否则还需要在最后一个字节后面做字节填充;
而偏移量必须是变量自己大小的整数倍,否则在前一个变量地址后面填充;
例:
struct data{
int a;
char b;
int c;
};
4是1的整数倍,所以b之前不用填充;
5不是4的整数倍,所以c之前填充3个字节,所以结构体的总长度是12个字节;
验证:
printf("%u\n",sizeof(struct data));//输出data的长度;
结果:
linux@ubuntu:~/workspace2/les3$ ./a.out
12