#include "stdafx.h"
#include <iostream>
#include <assert.h>
#include <string>
using namespace std;
union V
{
struct X
{
unsigned char s1:2;
unsigned char s2:3;
unsigned char s3:3;
} x;
unsigned char c;
} v;
int _tmain(int argc, _TCHAR* argv[])
{
v.c = 100;
printf("%d", v.x.s3);
return 0;
}
v是联合体(共用体)变量,共有两个元素x和c,都需要一个字节,它们分配于同一个地址。而x是结构体变量,共有三个元素s1、s2、s3,分别占2位、3位、3位。分配内存时低位在前,最位在后。当有v.c=100(其二进制为01100100)时,各变量的关系及内存存储情况见图所示。
其中x的成员s3为二进制的011,即十进制的3,所以输出结果为3。这是在小端模式下。
如果是大端模式呢?\(^o^)/~
union
{
int i;
char x[2];
}a;
int _tmain(int argc, _TCHAR* argv[])
{
a.x[0] = 10;
a.x[1] = 1;
printf("%d", a.i);
return 0;
}
输出为266,低位地地址,高位高地址,内存占用情况是0x010A