如何对嵌套结构体进行动态内存分配

我想要达到的结果

C语言编程
涉及结构体嵌套和动态内存分配
结构体A内包含n个结构体B,这样的结构体A共有m个,采用malloc函数,最后可以通过"A[m].B[n].c"来写入或者读取。
请问如何编写?

#include <stdio.h>

typedef struct _Student
{
    char name[20];
    int num;
    int score;
}Student;

typedef struct _Class
{
    char classname[20];
    Student *pStu;
}Class;


int main()
{
    int m,n;
    printf("请输入年级的班级数:");
    scanf("%d",&m);
    Class * grade = (Class*)malloc(sizeof(Class) * m);
    for(int i=0;i<m;i++)
    {
        printf("请输入第%d个班级名:",i+1);
        scanf("%s",grade[i].classname);
        printf("请输入第%d个班级学生数:",i+1);
        scanf("%d",&n);
        grade[i].pStu = (Student*)malloc(sizeof(Student)*n);
        for(int j=0;j<n;j++)
        {
            printf("请分别输入第%d个学生的姓名,学号和成绩(用空格分隔):\n",j+1);
            scanf("%s%d%d",grade[i].pStu[j].name,grade[i].pStu[j].num,&grade[i].pStu[j].score);
        }
    }
    return 0;
}

马上写

#include<stdio.h>
#include<stdlib.h>
struct Date{
    int year;
    int month;
    int day;
};
typedef struct Book{
    float price;
    struct Date date;//结构体嵌套
    char publisher[40];
}Book;
int main()
{
    int m,i;
    printf("请输入Book数量:\n");
    scanf("%d",&m);
    Book* book1 =(Book*)malloc(sizeof(Book)*m);//动态申请了m个Book结构体大小的内存空间
    for(i=0;i<m;i++){
        printf("请输入第%d本书的信息",i+1);
        printf("价格:");
        scanf("%f",&(book1[i].price));
        printf("购买时间:(2022-11-26)");
        scanf("%d-%d-%d",&(book1[i].date.year),&(book1[i].date.month),&((book1[i].date.day)));
        printf("出版商:");
        scanf("%s",book1[i].publisher);
    }
    for(i=0;i<m;i++)
    {
    printf("book%d价格:%.2f\t",i+1,book1[i].price);
    printf("book%d日期:%d-%d-%d\t",i+1,book1[i].date.year,book1[i].date.month,book1[i].date.day);
    printf("book%d出版社:%s\t",i+1,book1[i].publisher);
    printf("\n");
    }
    return 0;
}

img

你说的这个意思是一个结构体包含另一个结构体成员,这种不需要malloc直接正常定义就可以访问呀,当一个结构体想嵌套包含自己的时候,这样才用到结构体成员为结构体本身类型的指针,这个时候通常需要malloc来给指针申请内存,典型的例子就是链表