结构体成员内部含有一级指针和二级指针的情况

来源:互联网 发布:sql server error 26 编辑:程序博客网 时间:2024/05/02 00:33

结构体成员内部含有一级指针和二级指针的情况

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


typedef struct _Teacher
{
char name[64];
char *title;
char **pStuArray;
int age;


}Teacher;
void copy(Teacher *to, Teacher *from)
{
*to = *from;
}
void que(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;
}
}
}
}
void  Freearray(Teacher *array, int num)//释放内存空间
{
int i, j;
for (i = 0; i < num; i++)
{
//释放pStuArray的内存
char **tmp = array[i].pStuArray;
if (tmp == NULL)
{
continue;
}
for (j = 0; j < num; j++)
{
if (tmp[j] != NULL)
free(tmp[j]); 
}
free(tmp);
//释放title的内存
for (i = 0; i < num; i++)
{
if (array[i].title != NULL)
{
free(array[i].title);
array[i].title = NULL;
}
}

}
free(array);//释放结构体的内存空间


}
//创建内存空间
Teacher* creatarray(int num)
{
int i, j;
int ret = 0;
Teacher* array = NULL;
array= (Teacher *)malloc(num*sizeof(Teacher *));
if (array == NULL)

return;


}
for (i = 0; i < num; i++)
{
array[i].title = (char *)malloc(100);
char **tmp = (char **)malloc(num*sizeof(char *));
for (j = 0; j < num; j++)
{
tmp[j] = (char *)malloc(120);
}
array[i].pStuArray = tmp;
}


return array;
}
int main()
{
int i,j;
int ret = 0;

//Teacher array[3];
Teacher *p = NULL;
p=creatarray(3); 
if (p==NULL)
{
return ;


}


//printf("input ages\n");
for (i = 0; i<3; i++)
{
printf("请输入第%d个老师的成绩",i+1);
scanf("%d",&p[i].age);
printf("请输入第%d个老师的姓名", i + 1);
scanf("%s",p[i].name);
printf("请输入第%d个老师的职称", i + 1);
scanf("%s", p[i].title);
for (j = 0; j < 3; j++)
{
printf("请输入第%d个学生的名字", j + 1);
scanf("%s", p[i].pStuArray[j]);
}
}
que(p,3);
for (i = 0; i < 3; i++)
{
printf("%d", p[i].age);
printf("%s\n", p[i].name);
}
//释放内存空间
Freearray(p,3);


system("pause");


return 0;
}
0 0