//结构体数组 3 输入老师年龄 排序
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<ctype.h>
typedef struct teacher
{
char name[64];
char*alisname; //分配了四个字节的内存 需要显式的分配内存
char**sName;
int age;
int id;
}teacher;
void printfTeacher(teacher*array, int num)
{
int i = 0;
for (i = 0;i < num;i++)
{
printf("age:%d\n", (array[i].age));
}
}
void sortTeacher(teacher*array, int num)
{
int i, j;
teacher tmp;
for (i = 0;i < num;i++)
{
for (j = i + 1;j < num;j++)
{
if (array[i].age > array[j].age)
{
tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
}
int createTeacher(teacher**pT, int num)
{
int i = 0, j = 0;
teacher*tmp = NULL;
tmp = (teacher*)malloc(sizeof(teacher)*num);//teacher Array[3];
if (tmp == NULL)
{
return -1;
}
memset(tmp, 0, sizeof(teacher)*num);//刚分配完后 立马初始化
for (i = 0;i < num;i++)
{
//malloc一级指针
tmp[i].alisname = (char*)malloc(60);//指针明确指向 显式的分配内存
//malloc二级指针
//二级指针的第三种内存模型 自己打造内存空间
char**p = NULL;
p = (char**)malloc(3 * sizeof(char*)); //打造二维内存 p二级指针 p[]就是一级指针
for (j = 0;j < 3;j++)
{
p[j] = (char*)malloc(120);
}
tmp[i].sName = p;//挂上去
}
//pT二级指针 *pT就是一级指针 也就是pArray的地址
*pT = tmp;//二级指针 形参 去间接修改实参的值
return 0;
}
void freeTeacher(teacher*p, int num)
{
int i = 0, j = 0;
if (p == NULL)
{
return;
}
for (i = 0; i < num; i++)
{
//释放一级指针
if (p[i].alisname != NULL)
{
free(p[i].alisname);
}
//释放二级指针
if (p[i].sName != NULL)
{
char**p1 = p[i].sName;
for (j = 0;j < 3;j++)
{
if (p1[j] != NULL)
{
free(p1[j]);
}
}
free(p);
p[i].sName = NULL;
}
}
}
void main51()
{
int ret;
int i = 0,j=0;
int num = 3;
teacher*pArray = NULL;
ret = createTeacher(&pArray, num);
if (ret != 0)
{
printf("funerr_createTeacer()");
return;
}
for (i = 0; i < num; i++)
{
printf("\nplease enter age:");
scanf_s("%d", &(pArray[i].age));
printf("\nplease enter alias:");
scanf_s("%s", pArray[i].alisname);//向指针所指向的内存空间拷贝数据
for (j = 0;j < 3;j++)
{
printf("\nplease enter stuent name");
scanf_s("%s",pArray[i].sName[j]);
}
}
printfTeacher(pArray, num);
sortTeacher(pArray, num);
printf("排序之后\n");
printfTeacher(pArray, num);
printf("hehehe\n");
system("pause");
return;
}
【C语言提高40】结构体套一级指针和二级指针
最新推荐文章于 2022-05-19 17:23:40 发布