union共享同一段内存。
struct内存原则: 从上至下进行内存分配,对齐方式以当前分配到的内部成员类型最宽字节数为基准;整体以结构体成员最宽类型字节为基准,且整个结构体的总大小为最宽基本类型成员大小的整数倍。
#include <stdio.h>
struct A
{
char a:4;
char b:4;
short c:8;
int d:8;
};
struct B
{
int c:8;
char a:4;
short b:8;
};
struct A 内存分配表如下:
给 aa 赋值如下:
aa.a = 0x0;
aa.b = 0x1;
aa.c = 0x02;
aa.d = 0x03;
memory 内存显示如下:
拓展:
char: 1个字节
short: 2个字节
int: 4个字节
long: 4个字节
拓展:
LSB是Least Significant Bit的缩写,指最低有效位。
MSB是Most Significant Bit的缩写,指最高有效位。
数据先放高地址为MSB
Ti: Intel即Little Endian(lsb —— msb)
NXP: Motorola即Big Endian(msb —— lsb)
struct B 内存分配表如下:
给 bb赋值如下:
bb.c = 0x00;
bb.a = 0x1;
bb.b = 0x02;
memory 内存显示如下: