联合的记忆表示

时间:2014-09-06 19:46:29

标签: c unions

我写了这个简单的程序来检查union变量的内存表示。

int main()
{
    short s=0x7080;
    union{
        char c;
        short s;
    }un1={s};
    printf(" %#X",un1.s);
    return 0;
}

输出:0X80

un1 0x0045FE3C 80 00的内存表示。我原以为0x0045FE3C 80 70 为什么变量s没有保留'80 70'

1 个答案:

答案 0 :(得分:4)

  

为什么变量不能保持'80 70'?

因为您初始化了c,而不是s。初始化假定您设置第一个元素,所以

un1 = {s};

表示“将s转换为char,然后将其分配给un1.c,因为cunion的第一个元素。

如果要将其分配给s,请使用指定的初始值设定项:

un1 = {.s = s};

Demo.(按预期打印0X7080。)

相关问题