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
被覆盖,我们得到 p
的 ascii
值,当我们打印它时,它是 112
我们在那里存储 p
之后。这解释了您看到的行为。
我正在尝试学习 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
被覆盖,我们得到 p
的 ascii
值,当我们打印它时,它是 112
我们在那里存储 p
之后。这解释了您看到的行为。