一、代码如下:
#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
//定义一个结构体类型
typedef struct Teacher
{
char name[16];
int age;
int id;
char* bname;
}Teacher;
//申请结构体数组内存空间
Teacher* getMem(Teacher* parray, int num)
{
int i = 0;
Teacher* tmp = parray;
//==>Teacher parray[3];
tmp = (Teacher*)malloc(num * sizeof(Teacher));
if (tmp == NULL)
{
printf("func getMem() malloc error\n");
return NULL;
}
memset(tmp, 0, num * sizeof(Teacher));
for (i = 0; i < num; i++)
{
tmp[i].bname = (char*)malloc(16);
if (tmp[i].bname == NULL)
{
printf("func getMem() malloc error\n");
return NULL;
}
//malloc内存之后要及时初始化
memset(tmp[i].bname, 0, 16);
}
return tmp;
}
//给数组年龄及别名内存空间赋值
void set_value(Teacher* parray, int num)
{
int i = 0;
Teacher* tmp = parray;
for (i = 0; i < num; i++)
{
printf("\nplease input age:");
scanf("%d", &tmp[i].age);
printf("\nplease input bname:");
scanf("%s", tmp[i].bname);
}
}
//打印数据
void print_age_bname(Teacher* parray, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("%d\n", parray[i].age);//步长的问题
printf("%s\n", parray[i].bname);
}
}
//排序
void sortArray(Teacher* parray, int num)
{
int i = 0, j = 0;
Teacher tmp;
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
//由小到大
if (parray[i].age > parray[j].age)
{
tmp = parray[i];
parray[i] = parray[j];
parray[j] = tmp;
}
}
}
}
//释放申请的内存
void free_Mem(Teacher* parray, int num)
{
int i = 0;
Teacher* tmp = parray;
if (tmp == NULL)
{
return;
}
for (i = 0; i < num; i++)
{
if (tmp[i].bname != NULL)
{
free(tmp[i].bname);
}
}
if (tmp != NULL)
{
free(tmp);
}
}
//
int main()
{
//1.定义一个结构体指针
Teacher* pArray = NULL;
int num = 3;
pArray = getMem(pArray, num);
set_value(pArray, num);
//2.打印排序前
printf("sort before:\n");
print_age_bname(pArray, num);
//3.进行排序操作
sortArray(pArray, num);
//4.打印排序后
printf("sort after:\n");
print_age_bname(pArray, num);
//5.释放内存
free_Mem(pArray, num);
printf("\n");
system("pause");
return 0;
}
二、内存模型图: