嵌套结构使用初始化和使用

nested structures using initialization and use

本文关键字:初始化 结构 嵌套      更新时间:2023-10-16

所以我有一个头文件:

    struct inner1 {
        int w;
        int x;
};
    struct inner2 {
        int y;
        int z;
};
struct outer{
      inner1 *a;
      inner2 *b;
};

现在,我主要想初始化这些结构并使用它们。我如何初始化所有三个结构,以便outer将inner1和inner2识别为它所指向的特定结构。然后假设我想访问变量w。它是outer.a->w吗?我不熟悉处理指针的嵌套结构。感谢您的帮助。

struct inner1 {
        int w;
        int x;
};
    struct inner2 {
        int y;
        int z;
};
struct outer{
      inner1 *a;
      inner2 *b;
};
 int _tmain(int argc, _TCHAR* argv[])
{
   outer o;
   o.a = new inner1();
   o.b = new inner2();
   o.a->w = 1;
   o.a->x = 2;
   o.b->y = 3;
   o.b->z = 4;

//做事

  delete o.a;
  delete o.b;
    return 0;
}

这将允许您声明和初始化结构。

这里有一个演示程序

#include <iostream>
int main()
{
    struct inner1 {
        int w;
        int x;
    };
    struct inner2 {
        int y;
        int z;
    };
    struct outer{
        inner1 *a;
        inner2 *b;
    };
    outer o = { new inner1 { 10, 20 }, new inner2 { 30, 40 } };
    std::cout << "o.a->w = " << o.a->w << ", o.a->x = " << o.a->x
              << ", o.b->y = " << o.b->y << ", o.b->z = " << o.b->z
              << std::endl;
    delete o.a;
    delete o.b;
}   

程序输出为

o.a->w = 10, o.a->x = 20, o.b->y = 30, o.b->z = 40 

或者你可以按照的方式

#include <iostream>
int main()
{
    struct inner1 {
        int w;
        int x;
    };
    struct inner2 {
        int y;
        int z;
    };
    struct outer{
        inner1 *a;
        inner2 *b;
    };
    inner1 i1 = { 10, 20 };
    inner2 i2 = { 30, 40 };
    outer o = { &i1, &i2 };
    std::cout << "o.a->w = " << o.a->w << ", o.a->x = " << o.a->x
              << ", o.b->y = " << o.b->y << ", o.b->z = " << o.b->z
              << std::endl;
}    

方法取决于任务和对象的使用。

您的两个假设都是正确的。

只要这三个结构是按照这个顺序定义的,就不需要做出进一步的声明。

欢迎使用c++。

你将为自己做的最大的事情是尽早了解智能指针。

用原始指针来写结构几乎总是错误的。

#include <memory>
#include <iostream>
struct inner1 {
    inner1(int a, int b) : w(a), x(b) {}
    int w;
    int x;
};
struct inner2 {
    inner2(int a, int b) : y(a), z(b) {}
    int y;
    int z;
};
struct outer{
    outer(int w, int x, int y, int z)
    : a(std::make_unique<inner1>(w,x))
    , b(std::make_unique<inner2>(y,z))
    {}
    std::unique_ptr<inner1> a;
    std::unique_ptr<inner2> b;
};
int main()
{
    auto p_outer = std::make_unique<outer>(1, 2, 3, 4);
    return 0;
    // p_outer.a and .b are destroyed automatically here
    // and all memory is reclaimed.
}