gpt4 book ai didi

c - sizeof 结构和嵌套结构

转载 作者:行者123 更新时间:2023-11-30 20:50:23 29 4
gpt4 key购买 nike

我已经以这种方式设置了结构。当我打印 sizeof(DATA) 时,我得到 16。为什么是 16?我认为 idx 为 8,ptr 为 4。

我为 STUDENT 结构体和 STATS 结构体数组分配了大小为 50 的内存。我分配了足够的内存吗?

typedef struct {
int idNum;
int classNum;

} STATS;
typedef struct {
STATS * stats;
int currGrade;

}STUDENT;

typedef struct {
STUDENT * ptr;
int idx;

} DATA;

//student_main.c
void function1()
{
DATA d;
func(&d);
}
//student.c
void func(DATA * d)
{
Student * s = malloc(sizeof(STUDENT));
d->ptr = s;
d->ptr->currGrade = 1;

STATS * arr = malloc(sizeof(STATS)* 50);
d->ptr->stats = arr;
d->ptr->stats[0].idNum = 1;
d->ptr->stats[0].classNum = 1;
}

最佳答案

I have set up structs in this way. When I print the sizeof(DATA), I get 16. Why is it 16? I thought it would be 8 as 4 for idx, and 4 for the ptr.

因为编译器(可能)在结构元素之间/后面添加填充以满足对齐约束。您可以阅读有关 data structure alignment here 的内容.

就您的 DATA 而言,它是 16B,因为(如果您的机器是 x64)

typedef struct
{
STUDENT * ptr; // 8B pointer
int idx; // 4B int
// 4B padding
} DATA;
<小时/>

I allocate memory for the STUDENT struct and STATS struct array of size 50. Have I allocated enough memory?

这取决于您的需求。您已为 50 个结构分配了足够的空间。请记住在分配动态内存时始终使用 sizeof(type)

关于c - sizeof 结构和嵌套结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45900251/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com