c中联合的内存分配

Memory Allocation in c for union

我正在尝试学习 c 中联合的内存分配,但在尝试这样做时遇到了问题

#include <stdio.h>
union abc
{
    int a;
    char name[5];
};

int main()
{
    union abc hh;
    printf("Enter two values\n");
    scanf("%d%s",&hh.a,&hh.name);
    printf("Values are\n");
    printf("%d\n%s",hh.a,hh.name);

    return 0;
}

如上面的代码所示,我试图将两个值存储在 union.But 中,但是输入值“23”和 'p' 后得到的结果是

Enter two values                                                                                                                 
23                                                                                                                              
p                                                                                                                                
Values are                                                                                                                       
112                                                                                                                              
p   

有人可以帮我解决上面的代码吗

一个联合的成员在内存中共享相同的space。这意味着写入一个成员会覆盖 所有其他成员中的数据,并且从一个成员读取的结果与从所有其他成员读取的数据相同 成员。

考虑到这一点,您会看到初始值 23 被覆盖,我们得到 pascii 值,当我们打印它时,它是 112我们在那里存储 p 之后。这解释了您看到的行为。