您的位置:首页 > 编程语言 > C语言/C++

C语言 三级指针的应用

2016-05-16 15:21 369 查看
//三级指针的使用
#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");
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: