2017-07-18 126 views
1

我看到这个题目的几个问题。但我的查询不能resolved.Links:嵌套结构内存分配

Structure memory allocationAllocating memory for nested structure pointerUnderstanding Nested Structures

基本上当我们创建的实例分配内存当我们定义它时没有一个结构。所以,如果我在这个结构中创建另一个结构的目标,即让这样的事情:?

struct a{ 
int c; 
}; 

struct b 
{ 
struct a obj; 
}; 

现在给我们宣布它struct bstruct a对象的内存(我们也可以做到这一点通过指针,但如果我们这样做,会怎么样)。

+0

由于没有'b'的实例,所以不能为其成员分配内存。 –

回答

2

在你的情况下,struct b也是一个(另一个)声明,就像struct a一样。

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

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

+0

非常感谢你:) –

+0

我会upvote,如果我有足够的声望点。 –

0

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