嵌套结构内存分配

时间:2017-07-18 05:38:06

标签: c struct

我在这个主题上看到了几个问题。但是我的查询无法解决。链接:

Structure memory allocationAllocating memory for nested structure pointerUnderstanding Nested Structures

基本上,当我们创建结构的实例时,不是在我们定义它时分配内存。那么如果我在这个结构中创建另一个结构的对象,即如下所示:

<table>
  <tr>
    <td>1</td>
    <td>2</td>
    <td>3</td>
  </tr>
  <tr>
    <td>4</td>
    <td>5</td>
    <td>6</td>
  </tr>
  <tr>
    <td>7</td>
    <td>8</td>
    <td>9</td>
  </tr>
</table>

<button onclick="upward()">Click!</button>
当我们在struct a{ int c; }; struct b { struct a obj; }; 中声明它时,

现在是给struct a对象的内存吗?(我们也可以通过指针来做,但如果我们这样做的话会怎样)。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

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