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");
}

原文地址:https://www.cnblogs.com/zhanggaofeng/p/5498218.html