用于联合的c中的内存分配

时间:2018-02-10 06:41:34

标签: c unions

我正在尝试在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中存储两个值。但是我输入的结果为“23”和“p”之后的结果是

Enter two values                                                                                                                 
23                                                                                                                              
p                                                                                                                                
Values are                                                                                                                       
112                                                                                                                              
p   

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

1 个答案:

答案 0 :(得分:0)

联盟的成员在内存中共享相同的空间。这意味着写一个成员 会覆盖 所有其他成员中的数据以及从一个成员读取的数据与从其他成员读取的数据相同 成员。

考虑到这一点,您会看到初始值23被覆盖,当我们打印出来之后,我们得到ascii p112 p在那里存储package com.aa; public class AA { protected void testProcAA(){ System.out.println("In AA"); } } 。这解释了您所看到的行为。