• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言三级指针的应用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
//三级指针的使用
#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\n", ERRO_MSG);
        return ERRO_MSG;
    }
    for (i = 0; i < num; i++)
    {
        if (pin[i] != NULL)
        {
            printf("%s\n", pin[i]);
        }
        else{
            ERRO_MSG = 2;
            printf("数据录入错误! erro msg:%d\n", 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\n", ERRO_MSG);
        return ERRO_MSG;
    }
    char **tempp = *pin;//灵性代码,用一个变量接收一下
    if (tempp == NULL)
    {
        ERRO_MSG = 1;
        printf("*pin==NULL 二维数组数据不可以为空 erro msg:%d\n", 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\n", 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\n", p1);
    }

    system("pause");
}

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中异步和多线程的区别发布时间:2022-07-14
下一篇:
文件&quot;C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\DATA\mastlog.ldf&quot ...发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap