C语言初阶(八)联合体

一.定义

联合体是成员共用内存空间。

二.作用

1.在不同时刻把不同东西存在同一个位置时可以使用联合体

例:

声明了一个结构体和一个联合体,联合体内部包含了一个结构体和一个无符号整形数据(32位的)

#include "stdio.h"
 
typedef struct
{
    unsigned char Red;
    unsigned char Green;
    unsigned char Blue;
}RGB_Typedef;
 
typedef union
{
    RGB_Typedef rgb;
    unsigned int value;
}Pix_Typedef;
 
void main()
{
    Pix_Typedef pix;
    printf("%x\r\n",&pix.rgb); 
    printf("%x\r\n",&pix.value); //value与rgb的首地址相同
}

定义三原色分别为0X11、0X22、0X33,然后不再做任何处理,直接打印value

void main()
{
	Pix_Typedef pix;
	pix.rgb.Blue=0X33;
	pix.rgb.Green=0X22;
	pix.rgb.Red=0X11;
	printf("%X\r\n",pix.value);
}

 输出:CC332211

unsigned int 是一个4字节数据,而前面我们只定义了三个unsigned char ,只占三个字节。所以MSB自动补齐了。在union中,分配内存空间的大小,等于占内存最大的数据类型字节大小。

先对value赋值,然后再输出R、G、B值

void main()
{
	Pix_Typedef pix;
	pix.value = 0X00123456;
	printf("%X\r\n",pix.rgb.Red);
	printf("%X\r\n",pix.rgb.Green);
	printf("%X\r\n",pix.rgb.Blue);
}

 输出:56 \t 34 \t 12

可以说明,无论是修改结构体,还是修改unsigned int ,都会对对方造成影响。因为他们是共享同一段内存。 

三.初始化

联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且它必须位于一对花括号内。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值