我不明白为什么以下代码的输出是15,15。 union 嵌套在代码中。这个问题是在面试软件工程师职位时被问到的
#include <stdio.h>
#include <malloc.h>
int main()
{
union A
{
long int y[5];
union B
{
double g;
union C
{
int k;
union D
{
char ch;
int x[5];
}s;
}a;
}b;
}*p;
p = (union A*) malloc(sizeof(union A));
p->b.a.k = 15;
printf("%d ,%d", p->b.a.s.x[0], p->y[0] );
}
此代码打印 15,15。请解释为什么这会打印 15,15 而不是垃圾,垃圾,正如我所期望的那样?当我使用 float k 而不是 int k 时,输出是垃圾,垃圾为什么会发生这种情况?
最佳答案
如果这个 union 没有嵌套,成员将是:
long int y[5];
double g;
int k;
char ch;
int x[5];
在您的平台上,long int
和 int
可能都是 4 个字节,因此 y[0]
, k
和 x[0]
都引用相同的整数。因此,它们包含相同的值也就不足为奇了。
关于c++ - c 中的嵌套 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060218/