Linux C语言:公共体/联合体

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
发布了30 篇原创文章 · 获赞 36 · 访问量 683

猜你喜欢

转载自blog.csdn.net/qq_42745340/article/details/104131916