【C语言提高40】结构体套一级指针和二级指针

来源:互联网 发布:淘宝主图最好是多少kb 编辑:程序博客网 时间:2024/05/16 10:43
//结构体数组  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;}

0 0
原创粉丝点击