插入课程信息有的地方不明白


void *insert()//插入课程信息 
{
     SUB *ptr,*subj;     
     int size=sizeof(SUB);
     char ch,ch1;
     while(ch!='0')
        {
              subj=(SUB *)malloc(size); 
              ptr=subj;
              printf("输入要插入的课程信息:\n");
              printf("\n\t\t请输入课程编号:");scanf("%d",&subj->num);   
              printf("\n\t\t请输入课程名称:");scanf("%s",&subj->name);  
              printf("\n\t\t请输入课程性质:");scanf("%s",&subj->kind);  
              printf("\n\t\t请输入总学时:");scanf("%d",&subj->stime);
              printf("\n\t\t请输入授课学时:");scanf("%d",&subj->ttime);
              printf("\n\t\t请输入实验或上机学时:");scanf("%d",&subj->etime);
              printf("\n\t\t请输入学分:");scanf("%d",&subj->score);
              printf("\n\t\t请输入开课学期:");scanf("%d",&subj->term);
              myInsert(subj);
            printf("\n添加完毕,新信息存入文件中\n");
            printf("\n继续插入请按回车\n");
            printf("\n结束添加课程按 0: [ ]\b\b");
            ch1=getchar();                    
            ch=getchar();
        }
     return head;
}

int size=sizeof(SUB); subj=(SUB *)malloc(size); 能帮忙解释一下这两句的作用吗

第一行代码 int size=sizeof(SUB) 的作用是计算结构体类型 SUB 的字节大小,将其存储在变量 size 中。在这个程序中,变量 size 用于为存储 SUB 类型数据的内存分配空间。这是因为在这个程序中,需要动态分配内存来存储 SUB 类型的结构体数据。

第二行代码 subj=(SUB *)malloc(size) 的作用是动态分配内存空间,并将指向该内存空间的指针存储在变量 subj 中。这个程序中,使用 malloc 函数分配了一个大小为 size 字节的内存空间,然后将该内存空间的首地址转换为 SUB 类型的指针,并将该指针存储在变量 subj 中。这个指针变量 subj 将被用于存储用户输入的课程信息。

由于 SUB 类型的结构体包含不同类型的成员变量,因此需要使用动态内存分配来确保内存空间足够存储用户输入的数据。同时,由于需要动态分配内存,需要使用 malloc 函数分配空间,并且需要指定分配空间的大小,这就需要使用 sizeof 运算符来计算结构体的字节大小。最后,将分配的内存地址转换为相应的指针类型,以便后续的存储操作。
望采纳。

动态申请内存空间

以下答案引用自GPT-3大模型,请合理使用:

size=sizeof(SUB)是计算subj结构体变量大小,malloc函数用于向堆内存申请size大小的内存空间,把这部分空间的地址赋给subj。

如果我的回答解决了您的问题,请采纳我的回答