首页 > 解决方案 > 通过 calloc() 分配结构:成员初始化为哪个值?

问题描述

例如我有一个struct

struct s{
    char c;
    int x;
};

我用它calloc()来分配内存。

s *sp = (s*) calloc(1, sizeof(s));

现在sp->c,和的值是sp->x什么?

标签: cmemory-managementstructdynamic-memory-allocationcalloc

解决方案


的值是什么?sp->csp->x

由于calloc()将分配内存的所有位设置为0,c并且如果值表示和的所有位为(这是常见的) ,x则将具有的值。00intchar0

NULL请注意,在指针的情况下,当仅将所有位设置为 C 标准时,指针可能不是符合标准的指针,0因为 C 标准不需要NULL指针的表示为全零位。


旁注:

1.

struct s{
    char c;
    int x;
};

s *sp = (s*) calloc(1, sizeof(s));

不能像sis'ta typedefd 类型那样工作;它是一个结构标签。因此,您需要在s关键字struct前面:

struct s *sp = (struct s*) calloc(1, sizeof(struct s));

2.

您不需要从calloc()和其他内存管理函数中转换返回的指针,而是避免它,因为它会给您的代码添加混乱。->我要转换 malloc 的结果吗

因此,只需执行以下操作:

struct s *sp = calloc(1, sizeof(struct s));

推荐阅读