C语言 联合体

十、联合体

10.1 联合体介绍及声明格式

联合体是一种数据类型,能在同一片内存空间中存放不同的数据类型,但不是同时储存

例如在联合体内存放int,char,double类型的数据,编译器会开辟一个空间以便存放联合体里

最大字节的类型,那么在本例中占用最大字节的类型是double,所以会开辟一个64位的空间

联合体声明格式:

union type
{
	char letter;
	int digit;
	double bigfl;
};

联合体开辟的64位空间每次只能储存一个值,第二次储存的值会覆盖第一次储存的值,根据

下面的初始化可以更好理解

10.2 联合体初始化

10.2.1 用已有的同类型联合体初始化

	union type t;
	t.letter = 'A';
	union type s = t;

10.2.2 声明时初始化

    union type b = {'C'};

由于type类型联合体里第一个成员的类型是char,所以这种方式会将'C'初始化给letter。

前面提到联合体只能储存一个值,所以这种初始化的方式花括号只能有一个元素,这个元素赋联合体里的第一个成员。

10.2.3 声明时指定初始化

	union type b = { .bigfl = 2.2222 };

 10.3 联合体使用

10.3.1 联合体赋值

	b.letter = 'G';
	b.digit = 33333;
	b.bigfl = 4555.323;

 这里的点运算符表示现在在使用哪种数据类型的成员。由于联合体每次只能存放一个值,即使有足够的空间也不会同时存放char和int类型的值。所以第二行代码在赋值时会先将空间中存放的'G'

清除,再存放33333,第三行同理

 10.3.2联合体指针

	union type t;
	t.letter = 'A';
	union type* pt=&t;
	pt->letter;

10.4联合体大小计算规则

1.联合体大小至少是最大数据类型的大小

2.当最大数据类型的大小不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍

union hold
{
	int z;
	char a[5];
};

上面这个联合体占用空间最大的数据类型是char a[5],需要5位的空间

int的对齐数是4,char的对齐数是1,所以联合体最大对齐数是4

5不是4的整数倍,所以需要浪费3个位,则联合体的大小为8

printf("%d", sizeof(h));
结果:8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值