C语言union(联合)

union

union类似于结构,
联合成员使用同一片内存,union的所占字节数与最大成员相同
同一时间只有一个成员有效,所以初始化联合变量时只初始化第一个成员

#include<stdio.h>
union number{
	 long long i;
	 char s[sizeof(int)];
};
int main()
{
	 long long j;
	 union number a;
	 union number *p=&a;
	 printf("sizeof(j)=%d\n",sizeof(j));				//sizeof(j)=8
	 printf("sizeof(a)=%d\n",sizeof(a));				//sizeof(a)=8
	 printf("sizeof(union number)=%d\n",sizeof(union number));	//sizeof(union number)=8
	 printf("&(a.i)=%p\n",&(a.i));					//&(a.i)=000000000062FE10
	 printf("&(a.s)=%p\n",&(a.s));					//&(a.s)=000000000062FE10
	 return 0;
} 

使用union读取变量内存

#include<stdio.h>
union number{
	 int i;
	 char s[sizeof(int)];
};
int main()
{
	 union number a={.i=9265};	//9265 =0X2431
	 int k;
	 for(k=0;k<sizeof(int);k++){
	 printf("%02X ",a.s[k]);//每个字符按2个十六进制方式输出 
 }					//31 24 00 00
  
 return 0;
} 

小端输出实例(X86处理器)

9265 = 0X2431
猜测输出为:00 00 24 31
实际输出为:31 24 00 00

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值