我在这个主题上看到了几个问题。但是我的查询无法解决。链接:
Structure memory allocation, Allocating memory for nested structure pointer,Understanding 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
对象的内存吗?(我们也可以通过指针来做,但如果我们这样做的话会怎样)。
答案 0 :(得分:2)
在您的情况下,struct b
也是(另一个)声明,与struct a
相同。
这里没有内存分配。如果变量是由这种类型定义的,那么编译器应该知道要分配多少内存。仅仅因为结构的一个成员是另一个结构,并不意味着必须在那里分配内存。一旦你有了一个类型的变量,就会发生内存分配。
这里只需要注意,内部结构类型必须在用作外部类型的成员之前声明。
答案 1 :(得分:0)
C编译器使用您定义的数据类型保持单独的环境。此环境不会在生成的代码中出现,但是如果您使用该环境中的类型定义变量,C编译器将查看该环境中的信息(由struct id {...}
声明进行变更)。