#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Teacher
{
char name[64];
int age;
char** stuName;//每个老师带n个学生(第一维),每个学生的名字(字符串,第二维)
}Teacher;
int createTArr(Teacher** tArr,int num,int stu_num){
Teacher* p =NULL;//辅助指针
p = (Teacher*)malloc(sizeof(Teacher)*num);
for(int i=0;i<num;i++){
p[i].stuName = (char**)malloc(sizeof(char*)*stu_num);
for(int j=0;j<stu_num;j++){
p[i].stuName[j] = (char*)malloc(64);
}
}
*tArr = p;//挂上
return 0;
}
int freeTArr(Teacher** tArr,int num,int stu_num){
Teacher* p = *tArr;
//先释放每个学生的名字(字符串)
for(int i=0;i<num;i++){
for(int j=0;j<stu_num;j++){
if(p[i].stuName[j]!=NULL){//释放一级指针char*
free(p[i].stuName[j]);
p[i].stuName[j] = NULL;
}
}
if (p[i].stuName!=NULL)//释放二级指针char**
{
free(p[i].stuName);
p[i].stuName = NULL;
}
}
if(*tArr!=NULL){//释放一级指针Teacher*
free(*tArr);
*tArr = NULL;
}
return 0;
}
void main() {
Teacher* tArr = NULL;
createTArr(&tArr,2,2);
for(int i=0;i<2;i++){
printf("请输入老师名字:");
gets(tArr[i].name);
for(int j=0;j<2;j++){
printf("请输入学生名字:");
gets(tArr[i].stuName[j]);
}
}
printf("\n\n\n");
for(int i=0;i<2;i++){
printf("老师名字:");
puts(tArr[i].name);
for(int j=0;j<2;j++){
printf("学生名字:");
puts(tArr[i].stuName[j]);
}
}
freeTArr(&tArr,2,2);
system("pause");
}
结构体套二级指针
猜你喜欢
转载自blog.csdn.net/itswrj/article/details/88749624
今日推荐
周排行