通过calloc()分配结构:所有成员都初始化为0吗?

问题描述 投票:-1回答:1

例如,我有一个struct

struct s{
    char c;
    int x;
};

并且我使用calloc()分配内存。

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

Nowsp->csp->x的值是多少?

c memory-management struct dynamic-memory-allocation calloc
1个回答
1
投票

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

由于calloc()将分配的内存的所有位都设置为0,如果c值的表示形式是x的所有位,则00将具有0的值(很常见)。

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


旁注:

1。

struct s{
    char c;
    int x;
};

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

无法使用,因为s不是typedef d类型;它是一个结构标签。因此,您需要在s之前加上struct关键字:

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

2。

您不需要强制转换calloc()和其他内存管理功能返回的指针,而是避免使用它,因为它会给您的代码增加混乱。 -> Do I cast the result of malloc

所以,就做:

struct s *sp = calloc(1, sizeof(struct s));
© www.soinside.com 2019 - 2024. All rights reserved.