//三级指针的使用 #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"); }