#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<string.h>
#include <stdio.h>
#include<ctype.h>
//输入老师结构体的年龄 并按年龄排序
//一个老师带三个学生
typedef struct Teacher
{
int age;
char name[20];
char* aliname;
char** stuname; //二级指针
}Teacher;
int CreatTeacher(Teacher** p, int num)
{
Teacher* tmp = NULL; //利用辅助指针
tmp = (Teacher*)malloc(num * sizeof(Teacher));
if (tmp == NULL)
{
return -1;
}
for (int i = 0; i < num; i++)
{
/*tmp[i].aliname = (char*)malloc(sizeof(char) * 10);*/
//手工打造内存空间 二级指针的第三种内存模型
char** tmp2 = (char**)malloc(num*sizeof(char*)); //一个老师带三个学生
for (int j = 0; j < num; j++)
{
tmp2[j] = (char*)malloc(sizeof(char) * 10);
}
tmp[i].stuname = tmp2;
}
*p = tmp;
return 0; //最后一定要返回值啊 不然OS怎么知道你想要的正确值是多少
}
void PrintfTeacherage(Teacher* p, int num)
{
for (int i = 0; i < num; i++)
{
printf("老师年龄:%d\n", p[i].age);
printf("老师name:%s\n", p[i].name);
/*printf("老师aliname:%s\n", p[i].aliname);*/
for (int j = 0; j < num; j++)
{
printf("学生%d名字:%s\n",j+1, p[i].stuname[j]);
}
}
}
void SortTeacherage(Teacher* p, int num)
{
int tmp;
for (int i = 0; i < num; i++)
for (int j = i + 1; j < num; j++)
{
if (p[i].age > p[j].age)
{
tmp = p[i].age;
p[i].age = p[j].age;
p[j].age = tmp;
}
}
}
void FreeTeacher(Teacher** p, int num)
{
Teacher* tmp = *p;
int i = 0;
int j = 0;
/*for (i = 0; i < num; i++)
{
if (tmp[i].aliname != NULL)
free((tmp[i]).aliname);
}*/
for (j = 0; j < num; j++)
{
if (tmp[i].stuname[j] != NULL)
free(tmp[i].stuname[j]);
}
if (tmp[i].stuname != NULL)
free(tmp[i].stuname);
if (tmp != NULL)
free(*p);
}
int main()
{
//输入老师结构体的年龄 并按年龄排序
int num = 3, ret = 0;
//Teacher array[3]; //在栈上分配内存
Teacher* array = NULL;
//CreatTeacher(&array, num);
ret = CreatTeacher(&array, num);
if (ret != 0)
{
printf("func.CreatTeacher2() error:%d\n", ret);
return ret;
}
int i = 0;
for (i = 0; i < num; i++)
{
printf("\n请输入老师年龄:");
scanf("%d", &array[i].age);
printf("\n请输入老师名字:");
scanf("%s", &array[i].name);
//printf("\n请输入老师别名:");
//scanf("%s", array[i].aliname);
for (int j = 0; j < num; j++)
{
printf("\n请输入第%d个老师第%d学生的名字:",i+1,j+1);
scanf("%s", array[i].stuname[j]);
}
}
printf("排序前\n");
PrintfTeacherage(array, num);
printf("排序后\n");
SortTeacherage(array, num);
PrintfTeacherage(array, num);
FreeTeacher(&array, num);
printf("HELLO WORLD!\n");
system("pause");
return 0;
}
请输入老师年龄:3
请输入老师名字:33
请输入第1个老师第1学生的名字:3q
请输入第1个老师第2学生的名字:3a
请输入第1个老师第3学生的名字:3z
请输入老师年龄:2
请输入老师名字:22
请输入第2个老师第1学生的名字:2q
请输入第2个老师第2学生的名字:2a
请输入第2个老师第3学生的名字:2z
请输入老师年龄:1
请输入老师名字:11
请输入第3个老师第1学生的名字:1q
请输入第3个老师第2学生的名字:1a
请输入第3个老师第3学生的名字:1z
排序前
老师年龄:3
老师name:33
学生1名字:3q
学生2名字:3a
学生3名字:3z
老师年龄:2
老师name:22
学生1名字:2q
学生2名字:2a
学生3名字:2z
老师年龄:1
老师name:11
学生1名字:1q
学生2名字:1a
学生3名字:1z
排序后
老师年龄:1
老师name:33
学生1名字:3q
学生2名字:3a
学生3名字:3z
老师年龄:2
老师name:22
学生1名字:2q
学生2名字:2a
学生3名字:2z
老师年龄:3
老师name:11
学生1名字:1q
学生2名字:1a
学生3名字:1z
HELLO WORLD!
请按任意键继续. . .