MST

星途 面试题库

面试题:C++中struct和union嵌套的初始化与访问

定义一个嵌套结构,外层为struct,内部嵌套union。struct有一个int类型成员m和一个嵌套的union,union中有一个float类型成员f和一个double类型成员d。要求编写代码实现对这个嵌套结构的正确初始化,并通过不同方式访问其中的成员,同时阐述在初始化和访问过程中需要注意的事项。
15.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
#include <stdio.h>

// 定义嵌套结构
struct Outer {
    int m;
    union Inner {
        float f;
        double d;
    } inner;
};

int main() {
    // 初始化嵌套结构
    struct Outer obj = {
       .m = 10,
       .inner.f = 3.14f
    };

    // 通过不同方式访问成员
    printf("m的值: %d\n", obj.m);
    printf("f的值: %f\n", obj.inner.f);

    // 注意事项:
    // 1. 初始化时,根据实际需求选择union中合适的成员进行初始化。
    // 2. 访问union成员时,要确保访问的是最近一次赋值的成员,因为union成员共享内存,
    //    后赋值的成员会覆盖之前的值,否则可能得到错误的结果。

    return 0;
}
  1. 初始化注意事项
    • 对于structint成员m,可以像普通变量一样进行初始化。
    • 对于union,由于它的成员共享内存,同一时间只能有一个成员有效。所以在初始化union时,根据实际需求选择float成员fdouble成员d进行初始化。
  2. 访问注意事项
    • 访问structint成员m,直接通过结构体变量加成员访问运算符(.)访问即可。
    • 访问union成员时,要确保访问的是最近一次赋值的成员。例如在上述代码中,我们初始化了obj.inner.f,那么后续访问obj.inner.f是安全的,如果访问obj.inner.d,会得到未定义行为,因为d没有被正确初始化。