C语言——共用体union存储结构与大小端存储模式

发布时间 2023-11-13 15:46:40作者: 长弓令山

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
小端存储