c - 结构声明中的指针与局部变量

标签 c pointers struct

我经常面临这样的困境:

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/

相关文章:

转换并添加指向不同大小类型的指针

c - for循环重写结构体C中数组的所有值

c - C中的结构矩阵

c - 头文件中的 typedef 结构体 c 文件中的结构体定义

c - 函数 gets() 不会停止接受输入

c++ - char** vs char* c[] 用于访问字符串数组

c - 预处理器指令如何在 C 中工作?

c - 匹配具有相同字母的单词

C++ 如何获取对包含对象的引用?

c - 如何通过指向另一个指针的指针更改填充此字符串,然后该指针指向此字符串