malloc 是否将内存分配给自定义结构的属性?

ara*_*ata 0 c malloc typedef

我一直在从事一些C项目,想知道是否创建一个自定义结构,例如,Student定义一个自定义结构类型的变量,并使用malloc为其分配内存,它是否也为变量的属性单独分配内存或者它们都保存在同一个空间中?如果是,如果我为每个属性单独使用 malloc 分配内存会有什么区别吗?

例如:

typedef struct { 
    unsigned int ID; 
    char *first_name; 
    char *last_name;
    int num_grades; 
    float *grades;
    unsigned short int days_absent; 
    char *memo;
} Student;

int main() {

    // Declare students array
    Student *students = NULL;
    int students_size = 0;

    // Allocate memory for students array
    students = (Student *) malloc(sizeof(Student));
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

ike*_*ami 5

这为结构分配了足够的内存,其中包括足够的内存用于IDfirst_name等以及所有填充要求。

请注意,虽然它为指针分配内存first_name,但它不会分配缓冲区来保存名称。first_name它只是为指针分配内存。如果您想要存储名称的内存,则需要分配它。

如果结构体有一个char first_name[40];字段,那就是一个不同的故事了。要为 分配足够的内存first_name,需要为 40 的数组分配足够的内存char,而不是为指针分配足够的内存。这确实提供了可以存储字符串的空间。