C语言——共用体union存储结构与大小端存储模式
1、大小端存储模式
大端:低位数据字节存储在高地址
小端:低位数据字节存储在低地址
注释:例如int的权重低的8bit,低位指的是00000001
00000000 00000000 00000000 00000001
2、共用体union存储结构
共用体内每段数据元素从低地址开始存储。
注释:数组的每个元素的地址随着索引的增大而增大。
例如:
union { char b[2]; int a; } value; printf("pa: %p\n", &value.a); printf("pb1: %p\n", &value.b[1]); printf("pb0: %p\n", &value.b[0]); value.a = 1; printf("a: %d\n", value.a); printf("b1: %d\n", value.b[1]); printf("b0: %d\n", value.b[0]);
运行结果:
pa: 0061FF1C pb1: 0061FF1D pb0: 0061FF1C a: 1 b1: 0 b0: 1
3、通过union判断设备的数据存储方式
(1)无论什么数据类型在union中的存储方式都是先存低地址再存高地址,所以对int和char[0]取地址得到的值一定是一致的。
(2)因为共用体内每段数据元素从低地址开始存储,同时数组的每个元素的地址随着索引的增大而增大。据以上所说,char类型数组的第一个元素一定在union的最低地址。
(3)此时对int赋值,如果char[0]的值与int低八位的值相等,则表示int的低八位存储在低地址位置。
低地址-------------------------高地址 00000001 00000000 00000000 00000000 —— int 00000001 —— char
int == 1
小端存储