例如,我有一个struct
struct s{
char c;
int x;
};
并且我使用calloc()
分配内存。
s *sp = (s*) calloc(1, sizeof(s));
Now,sp->c
和sp->x
的值是多少?
“
sp->c
和sp->x
的值是什么?”
由于calloc()
将分配的内存的所有位都设置为0
,如果c
值的表示形式是x
的所有位,则0
和0
将具有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));