通过calloc()分配结构:成员初始化到哪个值?

通过calloc()分配结构:成员初始化到哪个值?,c,memory-management,struct,dynamic-memory-allocation,calloc,C,Memory Management,Struct,Dynamic Memory Allocation,Calloc,例如,我有一个struct struct s{ char c; int x; }; 我使用calloc()来分配内存 s*sp=(s*)calloc(1,sizeof(s)) 现在,sp->c和sp->x的值是多少 “sp->c和sp->x的值是多少?” 由于calloc()将分配内存的所有位设置为0,c和x的值为0,如果0的int和char的值表示为0(这是常见的) 请注意,在指针的情况下,当仅将所有位设置为0时,指针可能不符合标准NULL指针,因为C标准不要求NULL指针的

例如,我有一个
struct

struct s{
    char c;
    int x;
};
我使用
calloc()
来分配内存

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

现在
sp->c
sp->x
的值是多少

“sp->c
和sp->x的值是多少?”

由于
calloc()
将分配内存的所有位设置为
0
c
x
的值为
0
,如果
0
int
char
的值表示为
0
(这是常见的)

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


旁注:

一,

不能工作,因为
s
不是
typedef
d类型;它是一个结构标记。因此,您需要在
s
前面加上
struct
关键字:

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

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

所以,只要做:

struct s *sp = calloc(1, sizeof(struct s));
“sp->c和sp->x的值是多少?”

由于
calloc()
将分配内存的所有位设置为
0
c
x
的值为
0
,如果
0
int
char
的值表示为
0
(这是常见的)

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


旁注:

一,

不能工作,因为
s
不是
typedef
d类型;它是一个结构标记。因此,您需要在
s
前面加上
struct
关键字:

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

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

所以,只要做:

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

calloc()
将内存初始化为零
sp->c
sp->x
将为
0
(分别为
char
int
类型)。顺便说一句:强制转换
calloc()
的返回值充其量是多余的(如果没有强制转换,编译器可能会警告您一个错误)。回答标题中的问题:字符存储为数字。或者你指的是结构,不是字符?整个结构将被归零:所有成员,以及作为填充的任何空间。如果不需要C++,则在代码源的顶部添加“<代码>”IFDEF“.pPLUS PLUS”/“代码> /<代码> >错误>坏编译器 /Cudio>code>sp->c和
sp->x
将为
0
(分别为
char
int
类型)。顺便说一句:强制转换
calloc()
的返回值充其量是多余的(如果没有强制转换,编译器可能会警告您一个错误)。回答标题中的问题:字符存储为数字。或者你指的是结构,不是字符?整个结构将被归零:所有的成员,以及剩下的空间作为填充。如果不需要C++,在源文件的顶部添加“<代码>”IFDEF、“CPLUS PLUS”/“代码> /<代码>”错误错误编译器“<代码/ > >代码>”在我的编译器上,至少这是不起作用的,我必须做CAST,它不能初始化一个类型[type ] *的变量,它的值是Vault*@ PaltuoBube,首先,类属于C++,而不是C和C++是非常不同的语言。C代码不必与C++编译器一起工作,反之亦然。这个问题用C标记,并且提供的代码是C代码。艺龙网:我回答了你的问题。如果你在C++的代码中有一个问题,请问一个单独的问题,用C++来标记它,而不是C。这不属于这里。它还需要更多的信息,而不仅仅是在这个评论部分显示一点信息。我们需要查看确切的代码和编译器调用命令。@RobertS支持Monica Cellio,如果我的评论不清楚,我很抱歉,“类而不是结构”只是个问题,评论是关于我必须执行强制转换,否则:
无法使用'void*'s*sp=calloc(1,sizeof(struct s))类型的右值初始化's*'类型的变量@platinoob\问题是:我无法重现这个问题。最好单独提一个问题。如果我没有
struct
,而是
class
?在我的编译器上,至少这是不起作用的,我必须做CAST,它不能初始化一个类型[type ] *的变量,它的值是Vault*@ PaltuoBube,首先,类属于C++,而不是C和C++是非常不同的语言。C代码不必与C++编译器一起工作,反之亦然。这个问题用C标记,并且提供的代码是C代码。艺龙网:我回答了你的问题。如果你在C++的代码中有一个问题,请问一个单独的问题,用C++来标记它,而不是C。这不属于这里。它还需要更多的信息,而不仅仅是在这个评论部分显示一点信息。我们需要查看准确的代码和准确的编译器调用命令。@RobertS支持Monica Cellio,如果我的评论不清楚,我很抱歉,“类而不是struc”