【问题标题】:Nested Structures memory allocation嵌套结构内存分配
【发布时间】:2017-07-18 05:38:05
【问题描述】:

我看到了几个关于这个主题的问题。但我的问题无法解决。链接:

Structure memory allocation, Allocating memory for nested structure pointer,Understanding Nested Structures

基本上,内存是在我们创建结构实例时分配的,而不是在定义它时分配的。那么,如果我在这个结构中创建另一个结构的对象,即制作这样的东西怎么办:

struct a{
int c;
};

struct b
{
struct a obj;
};

当我们在struct b 中声明它时,现在是给struct a 对象的内存?(我们也可以通过指针来实现,但如果我们这样做会怎样)。

【问题讨论】:

  • 因为还没有b 的实例,所以不能为其成员分配内存。

标签: c struct


【解决方案1】:

在您的情况下,struct b 也是一个(另一个)声明,与 struct a 相同。

这里没有发生内存分配。它在那里让编译器知道,如果一个变量被定义为这种类型,要分配多少内存。仅仅因为一个结构的成员是另一个结构,并不意味着必须在那里分配内存。一旦你有了一个类型的变量,就会进行内存分配。

这里唯一需要注意的是,内部结构类型必须在用作外部类型的成员之前声明。

【讨论】:

    【解决方案2】:

    C 编译器为您定义的数据类型保留一个单独的环境。此环境不会在生成的代码中消失,但如果您使用该环境中的类型定义变量,C 编译器将查看该环境中的信息(由您的 struct id {...} 声明更改)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      相关资源
      最近更新 更多