zoukankan      html  css  js  c++  java
  • 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");
    }

  • 相关阅读:
    【原创】驱动加载之OpenService
    【原创】驱动加载之CreateService
    【原创】驱动加载之OpenSCManager
    【原创】如何由结构体成员的地址逆算出结构体首地址
    【原创+整理】简述何为调用约定,函数导出名以及extern C
    【整理】WDK 和 DDK异同
    java IO流
    java StringBuffer与StringBuilder
    java集合——进度1
    javaweb——总结
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/5498218.html
Copyright © 2011-2022 走看看