#define _CRT_SECURRE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef struct Teacher
{
char name[20];//20 内存块 已分配
int age;//4
char *alisname;//4 只分配4个字节的内存
char **stunames;//一个研究生导师带4名学生
}Teacher;
void printTeacher(Teacher *arr,int num)
{
int i;
for (i=0;i<num;i++)
{
printf("age:%d\n",arr[i].age);
}
}
void sortTeacher(Teacher *arr,int num)
{
int i,j;
Teacher tmp ;
for (i=0;i<num;i++)
{
for (j=i+1;j<num;j++)
{
if (arr[i].age>arr[j].age)
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}
//通过函数参数返回
int createTeacher2(Teacher**tea,int num)
{
Teacher *tmp;
int ret = 0,i,j;
char **p=NULL;
tmp =(Teacher*)malloc(sizeof(Teacher)*num);
//printf("sizeof(Teacher):%d\n",sizeof(Teacher));//
if (tmp == NULL)
{
ret = -1;
return ret;
}
memset(tmp,0,sizeof(Teacher)*num);
for (i=0;i<num;i++)
{
//为一级指针指向的分配内存空间
tmp[i].alisname = (char*)malloc(60);
//为二级指针指向的分配内存空间
p = (char**)malloc(num*sizeof(char*));
for (j=0;j<4;j++)
{
p[j] = (char *)malloc(20);
}
tmp[i].stunames = p;
}
*tea = tmp;
return ret;
}
void freeTeacher(Teacher *p,int num)
{
int i,j;
char **tmp;
if (p==NULL)
{
return ;
}
for (i = 0;i<num;i++)
{
//释放一级指针
if (p[i].alisname!=NULL)
{
free(p[i].alisname);
}
//释放二级指针
if (p[i].stunames!=NULL)
{
char **tmp = p[i].stunames;
for (j = 0;j < 4; j++)
{
if (tmp[j]!=NULL)
{
free(tmp[j]);
}
}
free(tmp);
p[i].stunames = NULL;
}
}
free(p);
}
int main33()
{
int i,j;
Teacher *Array;
createTeacher2(&Array,3);
for (i=0;i<3;i++)
{
printf("\nPlease inter teacher's name:");//想指针指向的
scanf("%s",Array[i].name);
printf("\nPlease inter teacher's age:");
scanf("%d",&Array[i].age);
printf("\nPlease inter teacher's alisename:");
scanf("%s",Array[i].alisname);
for (j=0;j<4;j++)
{
printf("\nPlease inter teacher's students'name:");
scanf("%s",Array[i].stunames[j]);
}
}
freeTeacher(Array,3);
system("pause");
return;
}
结构体包含二级指针
最新推荐文章于 2024-08-14 18:03:05 发布