结构体嵌套二级指针

结构体嵌套二级指针

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct Teacher
{
   
        char *name;
        char**Students;
};
void allocateSpace(struct Teacher***teachers)
{
   
        struct Teacher **pArray=malloc(sizeof(struct Teacher*)*3);
        for (int i = 0; i < 3; i++)
        {
   
               //给每个老师分配空间
               pArray[i] = malloc(sizeof(struct Teacher));
               //给每个老师姓名 分配空间
               pArray[i]->name=malloc(sizeof(char) * 64);
               sprintf(pArray[i]->name,"Teacher_%d",i+1);
               //给老师带的学生的数组分配空间
               pArray[i]->Students = malloc(sizeof(char*) * 4);
               
               //给4个学生分配内存,并且赋值
               for (int j=0;j<4;j++)
               {
   
                       pArray[i]->Students[j] = malloc(sizeof(char) * 64);
                       sprintf(pArray[i]->Students[j],"%s_Student_%d",pArray[i]->name,j+1);
               }
        }
        *teachers = pArray;
}
void showArray(struct Teacher**pArray,int len)
{
   
        for (int i = 0; i < len; i++)
        {
   
               printf("%s\n",pArray[i]->name);
               for (int j = 0; j < 4; j++)
               {
   
                       printf(" %s\n",pArray[i]->Students[j]);
               }
        }
}
void freeSpace(struct Teacher**pArray,int len)
{
   
        for (int i = 0; i < len; i++)
        {
   
               //释放老师姓名
               if (pArray[i]->name != NULL)
               {
   
                       free(pArray[i]->name);
                       pArray[i]->name = NULL;
               }
               //释放每个学生
               for (int j = 0; j < 4; j++)
               {
   
                       if (pArray[i]->Students[j] != NULL)
                       {
   
                              free(pArray[i]->Students[j]);
                              pArray[i]->Students[j] = NULL;
                       }
               }
               //释放学生数组
               free(pArray[i]->Students);
               pArray[i]->Students = NULL;
               //释放老师
               free(pArray[i]);
               pArray[i]->Students = NULL;
        }
        //释放老师数组
        free(pArray);
        pArray = NULL;
}
void test01()
{
   
        struct Teacher**pArray = NULL;
        //分配·内存
        allocateSpace(&pArray);
        //打印数组
        showArray(pArray,3);
        //释放内存
        freeSpace(pArray,3);
        pArray = NULL;
}
int main()
{
   
        test01();
        return EXIT_SUCCESS;
}

C/C++基础 文章被收录于专栏

本专栏收录C/C++编程语言相关知识

全部评论

相关推荐

||&nbsp;先说下主播个人情况:211本,暑期实习之前有过一段中大厂的后端实习,暑期拿过腾讯的实习offer,综合考虑业务和语言最终去了美团。实习期间体感还是不错的,5月初去的,去了就一直急着要需求做,担心因为没有产出导致转正失败,在第二个星期就和mt透露我希望能够留用。虽然第一个由于美团新人landing的友好性基本没做什么需求,但是后面也写出了小2w行的代码量(不包含单测)。中期经常主动加班赶需求,经常持续一两个星期加班到10点甚至更后面。mt对我确实不错,也是言传身教,实习期间给我讲了很多关于单测,ddd,set化等的理解,也是受益匪浅,此外在做需求的时候,也能看出把比较有含金量的部分交给我做...
菜菜菜小白菜菜菜:我在字节实习了四个月,有转正的压力所以周末大部分也在公司自学,也是因为一些原因转正拖的很久,这个点还没答辩,过段时间才回去答辩。整个不确定性的焦虑贯穿了我的秋招三个月,我也曾经犹豫过是不是应该放弃转正走秋招更快,最后因为沉没成本一直舍不得放弃,前前后后七个月真的挺累的,尤其是没有来字节实习的同学已经校招拿到意向时更加焦虑。这段时间也跟mentor聊了很多次,他告诉我未来工作上或者生活上,比这些更头疼的事情会更多,关键还是要调整好自己的心态。转正没有通过从过程上来看其实跟你自身没太大的关系,拖了三个月不出结果显然是ld的问题,并且今年美团最近的开奖大家似乎都不是很乐观,所以不去也罢。我在字节实习的时候,6月份有一个赶上春招末期的25届同事刚面进来,也拿到了小sp的薪水。不要对这件事有太大的压力,时代的问题罢了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务