我正在动态分配一个具有不同结构作为成员的结构:
struct a {
// other members
struct b;
}
struct b
基本上持有一个指向另一个的指针struct b
,所以想到struct b
作为链接列表。
如果我动态分配struct a
,那么这也会产生一个新的struct b
在其中。然而,这样做和拥有有什么区别?struct a
持有一个指针struct b
,并动态分配struct b
within struct a
?实施上有什么区别?
首先,让我们给出一些真正的定义来使其具体化。
struct b {
int x;
};
struct a_with_b {
struct b b;
}
struct a_with_b_ptr {
struct b *bp;
}
当你封装一个结构体时,你只需要分配外部结构体(并且由于内部结构体不是指针,所以你使用.
引用内部结构的成员):
struct a_with_b *a1 = malloc(sizeof(struct a_with_b));
a1->b.x = 3;
但是当你封装一个指针时,你必须独立分配每个指针并使用->
当引用内部结构的成员时:
struct a_with_b_ptr *a2 = malloc(sizeof(struct a_with_b_ptr));
a1->b = malloc(sizeof(struct b));
a1->b->x = 3;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)