如何在联合中共享内存

时间:2015-04-24 17:17:30

标签: c unions

代码

#include <stdio.h>
#include <string.h>

union share
{
    int num;
    char str[3];
}share1;

int main()
{
    strcpy(share1.str,"ab");
    printf("str is %s and num is %d", share1.str, share1.num );
    return 0;
}

我输出&#34; str是ab,num是25185&#34;。 str按原样打印,但如何获得25185。

2 个答案:

答案 0 :(得分:1)

工会在内存中重叠。这意味着代表您的int的2个字节与字符串的前2个字符(字节)共享相同的内存位置。更改字符会自动更改int,因为根据定义它们是相同的东西......只是被区别对待,因为您可以将这两个字节作为char或int访问。

a -> 0x61
b -> 0x62

25185 -> 0x6261
              ^--- a
            ^----- b

答案 1 :(得分:1)

“ab”的实际十六进制编码为:0x616200

重要的是联合的实例位于文件全局空间中 所以内存“预先设置”到所有0x00。

取决于体系结构,(小或大Endian)该值 “ab”将被理解为:

0x00006261 or as 0x61620000

如果打印数量很小,很明显 整数表示为0x00006261。 (小端)

0x00006261(十六进制)是25185(十进制)