我经常面临这样的困境:
typedef struct {
char *name;
int est;
list *employees;
} company;
对比
typedef struct {
char *name;
int est;
list employees; // here I used local variable instead of a pointer
} company;
在选择一个而不是另一个时,通常会考虑哪些问题?
据我所知,省略指针可以节省一点内存,而当多个结构使用相同的引用内存时保留指针会很有用(无论如何这里不是这种情况)。此外,当我使用局部变量定义时,变量会获得内存,这与使用指针相反,后者需要我自己 malloc
内存。
还有什么需要注意的吗?
编辑 list
是单链表:
typedef struct {
list_node *head, *tail;
} list;
我的问题不限于这种特殊情况,不过,我想知道在选择一个而不是另一个时一般应该考虑什么。
最佳答案
内存管理。如果您使列表实例成为结构的一部分,它将与结构一起分配/释放。如果您指向它,您将单独分配/释放它。如果它可能从多个地方指向它和/或它的生命周期不是 100% 与结构重合,那么单独管理它并指向它具有明显的优势。
基本上,这是一个基于您期望如何使用数据的判断调用。
关于c - 结构声明中的指针与局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21343805/