C语言中联合(union)的一个有意思的用途

xiaoxiao2021-02-28  36

    联合(union)在许多其他语言中称作变体记录(variant record),在联合中 ,所有的成员都从偏移地址零开始存储,这样,每个成员的位置都会重叠在一起。

    按照这种特性,联合可以把同一个数据解释成两种不同的东西,而不是把两个不同的数据解释为同一个东西,该用法的例子如下:

    

union bits32_tag { int whole; //一个32位的值 struct { char c0, c1, c2, c3;} byte; //四个八位的字节 } value;

    这个联合允许程序员提取整个32位值 (int),也可以提取单独的字节段如 value.byte.c0 等。

    例如: value.whole = 0xa0fe728b; 因为所有的成员都从偏移地址零开始存储,则value.byte.c0 = (char)0x8b,其他的以此类推。

转载请注明原文地址: https://www.6miu.com/read-2629522.html

最新回复(0)