c++ - c 中的嵌套 union

标签 c++ c nested unions

我不明白为什么以下代码的输出是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 intint 可能都是 4 个字节,因此 y[0], kx[0] 都引用相同的整数。因此,它们包含相同的值也就不足为奇了。

关于c++ - c 中的嵌套 union ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060218/

相关文章:

c++ - 从函数返回空 std::pair

c - 错误: conflicting types for "computeTemp" (C)

c - 关于 C 中的指针基础知识

Scala 嵌套映射 - 如何处理?

php - 两个 MySQL 结果集到一个嵌套数组

elasticsearch - Elasticsearch如何将嵌套对象连接到父文档

C++ 模板右值 Ctor 与 Const 引用 Ctor

c++ - 在 MacOS 上使用 Bazel 构建时调试 C++ 代码不起作用

用于调用 printf 的 C++11 编译时格式字符串文字构造

c - 为什么物理地址结构的高位部分定义为有符号类型?