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