我正在动态分配一个结构,该结构具有不同的结构作为成员:
struct a {
// other members
struct b;
}
Run Code Online (Sandbox Code Playgroud)
struct b基本上持有指向另一个的指针struct b,因此将其struct b视为链表.
如果我动态分配struct a,那么它也会struct b在其中创建一个新的.然而,就是这样做,或有之差struct a保持一个指针struct b,而动态分配struct b中struct a?实施有什么区别?
R S*_*hko 10
首先,让我们得到一些真正的定义来使这个具体化.
struct b {
int x;
};
struct a_with_b {
struct b b;
}
struct a_with_b_ptr {
struct b *bp;
}
Run Code Online (Sandbox Code Playgroud)
当你封装一个struct时,你只需要分配外部struct(因为内部struct不是指针,你.用来引用innert结构的成员):
struct a_with_b *a1 = malloc(sizeof(struct a_with_b));
a1->b.x = 3;
Run Code Online (Sandbox Code Playgroud)
但是当你封装一个指针时,你必须独立地分配每个指针,并->在引用内部结构的成员时使用:
struct a_with_b_ptr *a2 = malloc(sizeof(struct a_with_b_ptr));
a1->b = malloc(sizeof(struct b));
a1->b->x = 3;
Run Code Online (Sandbox Code Playgroud)
如果动态分配(malloc的)struct a,如
struct a *temp = (struct a *)malloc(sizeof(struct a));
Run Code Online (Sandbox Code Playgroud)
你malloc指望的空间struct b(假设它是什么struct a),但你没有malloc空间struct b.这意味着你以后必须这么做
temp->b = (struct b *)malloc(sizeof(struct b));
Run Code Online (Sandbox Code Playgroud)
在你尝试使用之前struct b.
如果您不存储指针struct b而是struct b直接存储指针,则在定义时将获得自动分配struct a.