请选择 进入手机版 | 继续访问电脑版

结构体二级指针案例

[复制链接]
谢世民 发表于 2021-1-1 18:33:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
  1. #define _CRT_SECURE_NO_WARNINGS#include "stdio.h"#include "stdlib.h"#include "string.h"typedef struct _Teacher{        char*name;        char**student;        //创建学生数组}Teacher;void allocateTeacherSpace(Teacher***tArr,int num){        Teacher**TeacherArr = malloc(sizeof(Teacher*)*num);//创建num个Teacher*        for (int i = 0; i < num;i++)        {                //给每个Teacher*开发空间                TeacherArr[i] = malloc(sizeof(Teacher));                //给每个Teacher成员开发空间                TeacherArr[i]->name = malloc(128);                TeacherArr[i]->student = malloc(sizeof(char*) * 5);                for (int j = 0; j < 5; j++)                {                        TeacherArr[i]->student[j] = malloc(128);                }        }        *tArr = TeacherArr;}void nameTeacher(Teacher**tArr,int num){        for (int i = 0 ; i < num; i++)        {                char buf[128] = { 0 };                sprintf(buf, "Teacher_%d", i + 1);                strcpy(tArr[i]->name, buf);                for (int j = 0; j < 5; j++)                {                        sprintf(buf, "T_%d_S_%d", i + 1, j + 1);                        strcpy(tArr[i]->student[j], buf);                }        }}void printMsg(Teacher**tArr, int num){        for (int i = 0; i < num;i++)        {                printf("%s\n", tArr[i]->name);                for (int j = 0; j < 5; j++)                {                        printf("%s\t\t", tArr[i]->student[j]);                }                printf("\n\n");        }}void freeMem(Teacher***tArr,int num){        Teacher**pTeacher = *tArr;        if (pTeacher==NULL)        {                return;        }        for (int i = 0; i < num; i++)        {                for (int j = 0; j < 5; j++)                {                        free(pTeacher[i]->student[j]);                        pTeacher[i]->student[j] = NULL;                        printf("释放T%d的学生S%d的内存\n", i + 1, j + 1);                }                free(pTeacher[i]->name);                pTeacher[i]->name = NULL;                printf("释放T%d的name内存\n", i + 1);                free(pTeacher[i]->student);                pTeacher[i]->student = NULL;                printf("释放T%d的student内存\n", i + 1);                free(pTeacher[i]);                pTeacher[i] = NULL;                printf("释放T%d的内存\n", i + 1);        }        free(pTeacher);        printf("释放Teacher的内存\n");        *tArr = NULL;}void test11(){        //堆区创建Teacher数组        Teacher**tArr = NULL;        int tNum = 9;        allocateTeacherSpace(&tArr, tNum);        //给Teacher数组赋值        nameTeacher(tArr, tNum);        printMsg(tArr, tNum);        freeMem(&tArr, tNum);}int main(){        test11();        system("pause");        return 0;}
复制代码
来源:https://blog.csdn.net/GodCaptain/article/details/112021969
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )