• 结构体做函数参数(三)


    结构体中含有二级指针的内存分配和释放

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    
    typedef struct Teacher
    {
        char name[64];
        char *alisname;
        char **stuname;
        int age;
        int id;
    }Teacher;
    
    void printTeacher(Teacher *array,int num)
    {
        int i = 0;
        for (; i < num; i++)
        {
            printf("age : %d
    ",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[j];
                    array[j] = array[i];
                    array[i] = tmp;
                }
            }
        }
    }
    
    int createTeacher( Teacher **pT, int num)
    {
        int i = 0, j = 0;
        Teacher *tmp = NULL;
        tmp = (Teacher *)malloc(num * sizeof(Teacher));
        if (NULL == tmp)
        {
            return -1;
        }
    
        memset(tmp,0,sizeof(Teacher)*num);
    
        for (i = 0; i < num; i++)
        {
            char **p = NULL;
            tmp[i].alisname = (char *)malloc(60);
    
            p = (char **)malloc(3 * sizeof(char *));
            for (j = 0;  j < 3; j++)
            {
                p[j] = (char *)malloc(120);
            }
            tmp[i].stuname = p;
        }
    
        *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].stuname != NULL)
            {
                char **myp = p[i].stuname;
                for (j = 0; j < 3; j++)
                {
                    if (myp[j] != NULL)
                    {
                        free(myp[j]);
                    }
                }
                free(myp);
                p[i].stuname = NULL;
            }
        }
        free(p);
    }
    
    int main()
    {
        int ret = 0;
        int i = 0, j = 0;
        int num = 3;
        Teacher *pArray = NULL;
        ret = createTeacher(&pArray,num);
        if (ret != 0)
        {
            printf("func createTeacher() err : %d
    ",ret);
            return ret;
        }
    
        for(i = 0; i < num; i++)
        {
            printf("
    please enter age:");
            scanf("%d",&(pArray[i].age));
    
            printf("
    please enter alias:");
            scanf("%s",(pArray[i].alisname));
    
            for (j = 0; j < 3; j++)
            {
                printf("please enter student name:");
                scanf("%s",pArray[i].stuname[j]);
            }
        }
    
        printTeacher(pArray,num);
    
        sortTeacher(pArray,num);
    
        printf("after sort
    ");
        printTeacher(pArray,num);
    
        FreeTeacher(pArray,num);
        return 0;
    }
  • 相关阅读:
    【Gamma】 Phylab 展示博客
    【技术博客】Postman接口测试教程
    【技术博客】利用Python将markdown文档转为html文档
    【技术博客】使用PhpStorm和Xdebug实现Laravel工程的远程开发及调试
    【技术博客】Laravel5.1文件上传单元测试
    【技术博客】移动端的点击事件与Sticky Hover问题
    【技术博客】 Laravel 5.1单元测试(PHPUnit)入门
    Scrum Meeting博客目录
    团队事后分析
    Gamma阶段测试报告
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11783793.html
Copyright © 2020-2023  润新知