ARM_C高级学习笔记(五)共用体

(一)共用体类型的定义、变量定义和使用

  1. 共用体union和结构体struct在类型定义、变量定义、使用方法上很相似。
  2. 共用体和结构体的不同:结构体类似于一个包裹,结构体中的成员彼此是独立存在的,分布在内存的不同单元中,他们只是被打包成一个整体叫做结构体而已;共用体中的各个成员其实是一体的,彼此不独立,他们使用同一个内存单元。可以理解为:有时候是这个元素,有时候是那个元素。更准确的说法是同一个内存空间有多种解释方式。
  3. 共用体union就是对同一块内存中存储的二进制的不同的理解方式。
  4. 在有些书中把union翻译成联合(联合体),这个名字不好。现在翻译成共用体比较合适。
  5. union的sizeof测到的大小实际是union中各个元素里面占用内存最大的那个元素的大小。因为可以存的下这个就一定能够存的下其他的元素。
  6. union中的元素不存在内存对齐的问题,因为union中实际只有1个内存空间,都是从同一个地址开始的(开始地址就是整个union占有的内存空间的首地址),所以不涉及内存对齐。

(二)共用体和结构体的相同和不同

  1. 相同点就是操作语法几乎相同。
  2. 不同点是本质上的不同。struct是多个独立元素(内存空间)打包在一起;union是一个元素(内存空间)的多种不同解析方式。
  3. 实例
#include <stdio.h>
// a和b其实指向同一块内存空间,只是对这块内存空间的2种不同的解析方式。
// 如果我们使用xx.a那么就按照int类型来解析这个内存空间;如果我们使用xx.b那么就按照char类型
// 来解析这块内存空间。
union myunion 
{
	int   a;
	char  b;
};

int main(void)
{
	union myunion xx;
	                  
	printf("xx.a = %p.\n", &xx.a);  //xx.a = 0x7ffdb4c50804.   //说明共用体变量是共用一块内存地址
    printf("xx.b = %p.\n", &xx.b);  //xx.b = 0x7ffdb4c50804.
	
	printf("sizeof(xx) = %d.\n", sizeof(xx)); //sizeof(xx) = 4. //共用体所占的空间大小是其成员中所占空间最大的那个

	xx.a = 12;                      // 结果
	printf("xx.a = %d.\n", xx.a);   // 12     
	xx.b = 22;
	printf("xx.a = %d.\n", xx.a);   // 22    //说明对于其中一个成员的赋值,会影响到另一个成员
	
	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值