• C语言 三级指针的应用


    //三级指针的使用
    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //三级指针做输出
    int getmun(char ***pout/*out*/,int *num){
        int ERRO_MSG = 0;
        if (pout==NULL)
        {
            ERRO_MSG = 1;
            printf("危险操作内存pout==NULL erro msg:%d", ERRO_MSG);
            return ERRO_MSG;
        }
        if (num == NULL)
        {
            ERRO_MSG = 2;
            printf("危险操作内存num==NULL erro msg:%d", ERRO_MSG);
            return ERRO_MSG;
        }
        int numx = 5;
        char **ptemp = (char **)malloc(sizeof(char *)*numx);
        int i = 0;
        for (i = 0; i < numx; i++)
        {
            ptemp[i] = (char *)malloc(sizeof(char)*20);
            char buf[20] = { 0 };
            sprintf(buf, "第%d同志们大家好", i);
            strcpy(ptemp[i], buf);
        }
        *pout = ptemp;
        *num = numx;
        return ERRO_MSG;
    }
    
    //打印数组
    int printfall(char **pin,int num){
        int ERRO_MSG= 0, i = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        for (i = 0; i < num; i++)
        {
            if (pin[i] != NULL)
            {
                printf("%s
    ", pin[i]);
            }
            else{
                ERRO_MSG = 2;
                printf("数据录入错误! erro msg:%d
    ", ERRO_MSG);
                return ERRO_MSG;
            }
        }
        return ERRO_MSG;
    }
    
    //释放堆内存(三级指针做输入)
    int freeall(char ***pin,int num){
        int ERRO_MSG = 0, i = 0;
        if (pin==NULL)
        {
            ERRO_MSG = 1;
            printf("pin==NULL erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        char **tempp = *pin;//灵性代码,用一个变量接收一下
        if (tempp == NULL)
        {
            ERRO_MSG = 1;
            printf("*pin==NULL 二维数组数据不可以为空 erro msg:%d
    ", ERRO_MSG);
            return ERRO_MSG;
        }
        for (i = 0; i < num; i++)
        {
            if (tempp[i] != NULL)
            {
                free((*pin)[i]);
                tempp[i] = NULL;
            }
            else{
                ERRO_MSG = 2;
                printf("*pin==NULL 二维数组数据不可以为空 erro msg:%d
    ", ERRO_MSG);
                return ERRO_MSG;
            }
        }
        free(tempp);
        tempp = NULL;
        *pin = NULL;
        return ERRO_MSG;
    }
    
    void main()
    {
        char **p1 = NULL;
        int num = 0, i = 0;
        int rest= getmun(&p1, &num);
        //打印p1的内容
        if (rest==0)
        {
            //打印数组
            printfall(p1, num);
            //释放内存
            freeall(&p1,num);
            printf("%p
    ", p1);
        }
    
        system("pause");
    }

  • 相关阅读:
    [Java复习] 缓存Cache part2
    [Java复习] 多线程 并发 JUC 补充
    [Java复习] 缓存Cache part1
    [Java复习] MQ
    [Java复习] 设计模式 Design Pattern
    [Java复习] Spring Cloud
    [Java复习] Spring Boot
    [Java复习] JVM
    [Java复习] Spring 常见面试问题
    关于nginx的源码安装方式
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5498218.html
Copyright © 2020-2023  润新知