MST

星途 面试题库

面试题:C语言复杂结构体嵌套初始化及优化

假设有一个结构体A,其内部嵌套了结构体B数组,结构体B又包含结构体C指针成员等多层嵌套结构。请设计一个高效的初始化方法,确保在初始化过程中,各层结构体成员能够正确赋值,同时优化内存访问效率和代码性能,给出完整的代码示例并解释关键实现步骤。
49.2万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#include <iostream>
#include <cstring>

// 定义结构体C
struct C {
    int value;
    C(int v) : value(v) {}
};

// 定义结构体B
struct B {
    C* ptrC;
    B() : ptrC(nullptr) {}
    ~B() {
        if (ptrC) delete ptrC;
    }
};

// 定义结构体A
struct A {
    B arrB[10];
    A() {
        for (int i = 0; i < 10; ++i) {
            arrB[i].ptrC = new C(i);
        }
    }
    ~A() {
        for (int i = 0; i < 10; ++i) {
            if (arrB[i].ptrC) delete arrB[i].ptrC;
        }
    }
};

int main() {
    A a;
    // 使用结构体a
    for (int i = 0; i < 10; ++i) {
        std::cout << "a.arrB[" << i << "].ptrC->value: " << a.arrB[i].ptrC->value << std::endl;
    }
    return 0;
}

关键实现步骤解释

  1. 结构体C的定义
    • 结构体C包含一个简单的int类型成员value,并提供一个构造函数用于初始化该成员。
  2. 结构体B的定义
    • 结构体B包含一个指向结构体C的指针ptrC。构造函数将ptrC初始化为nullptr,析构函数负责释放ptrC指向的内存。
  3. 结构体A的定义
    • 结构体A包含一个结构体B的数组arrB
    • 在结构体A的构造函数中,通过循环为数组arrB的每个元素的ptrC分配内存,并使用合适的值初始化结构体C。
    • 结构体A的析构函数负责释放arrB数组中每个元素的ptrC所指向的内存,以避免内存泄漏。
  4. 内存访问效率和性能优化
    • 通过在构造函数中直接初始化各层结构体成员,减少了不必要的内存分配和初始化开销。
    • 对于数组的访问采用连续的循环方式,符合CPU缓存预取机制,提高内存访问效率。同时,在析构函数中按照构造的逆序释放内存,确保资源正确回收。