抑郁症健康,内容丰富有趣,生活中的好帮手!
抑郁症健康 > 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )

【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )

时间:2021-07-14 03:29:19

相关推荐

文章目录

一、二级指针排序 ( 抽象业务逻辑函数 )1、生成 二级指针 函数2、打印 二维指针 函数3、二维指针排序 函数4、释放 二维指针 函数二、完整代码示例

一、二级指针排序 ( 抽象业务逻辑函数 )

1、生成 二级指针 函数

首先 , 为 一维指针变量 分配内存 ; 在堆内存中 , 分配一块内存空间 , 用于存储 num 个 一维指针 , 每个 一维指针 指向一块内存空间 ;

// 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = (char **)malloc( sizeof(char*) * num );

然后 , 为每个 一维指针 在堆内存中 分配 20 字节内存 , 并为其赋值 ;

// 遍历 二维指针 指向的多个 一维指针// 并为每个 一维指针 在堆内存中 分配 20 字节内存for(i = 0; i < num; i++){// 为每个字符分配 20 字节空间p[i] = (char *)malloc(sizeof (char) * 20);// 向内存中写入 字符串 , 字符串内容是 i + 1// 注意是通过通配符拼装的字符串sprintf(p[i], "%d", i + 1);}

代码示例 :

/*** @brief 生成二维指针* @param num* @return*/char **generate_memory(int num){// 循环控制变量int i = 0;// 声明二维指针char **p = NULL;// 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = (char **)malloc( sizeof(char*) * num );if(p == NULL){return NULL;}// 遍历 二维指针 指向的多个 一维指针// 并为每个 一维指针 在堆内存中 分配 20 字节内存for(i = 0; i < num; i++){// 为每个字符分配 20 字节空间p[i] = (char *)malloc(sizeof (char) * 20);// 向内存中写入 字符串 , 字符串内容是 i + 1// 注意是通过通配符拼装的字符串sprintf(p[i], "%d", i + 1);}return p;}

2、打印 二维指针 函数

循环遍历 二维指针 指向的 一维指针 变量 , 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串 ;

代码示例 :

/*** @brief 打印二维指针数据* @param array* @param num*/void printf_array(char **array, int num){// 循环控制变量int i = 0;// 判定指针合法性if(array == NULL){return;}// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串for(i = 0; i < num; i++){printf("%s\n", array[i]);}}

3、二维指针排序 函数

排序时 , 交换 二维指针 指向的 一维指针 变量 ; 从大到小 进行排序 ;

代码示例 :

/*** @brief 二维指针排序* @param p* @param num* @return*/int sort_array(char **p, int num){// 循环控制变量int i = 0, j = 0;// 排序时 , 交换指针 , 该指针是存储 要 交换指针 的临时变量char *tmp = NULL;// 判定指针合法性if(p == NULL){return -1;}// 对 二维指针 指向的数据进行排序for(i = 0; i < num; i++){for(j = i + 1; j < num; j++){// 交换 i , j 指针指向的内存数据// 从 大 到 小 进行排序if(strcmp(p[i], p[j]) < 0){tmp = p[i];p[i] = p[j];p[j] = tmp;}}}return 0;}

4、释放 二维指针 函数

先释放 二维指针 指向的 num 个 一维指针 指向的 内存空间 , 然后释放 二维指针 指向的内存空间 ;

注意 : 上述顺序不要反了 , 否则就出错了 ;

代码示例 :

/*** @brief 释放二维指针内存* @param p* @param num*/void free_mem(char **p, int num){// 循环控制变量int i = 0;// 判定指针合法性if(p == NULL){return;}// 释放内存// 先释放 num 个 一级指针for(i = 0; i < num; i++){if(p[i] != NULL){free(p[i]);p[i] = NULL;}}// 再释放 二级指针if(p != NULL){free(p);}}

二、完整代码示例

完整代码示例 :

#include <stdio.h>#include <stdlib.h>#include <string.h>/*** @brief 生成二维指针* @param num* @return*/char **generate_memory(int num){// 循环控制变量int i = 0;// 声明二维指针char **p = NULL;// 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = (char **)malloc( sizeof(char*) * num );if(p == NULL){return NULL;}// 遍历 二维指针 指向的多个 一维指针// 并为每个 一维指针 在堆内存中 分配 20 字节内存for(i = 0; i < num; i++){// 为每个字符分配 20 字节空间p[i] = (char *)malloc(sizeof (char) * 20);// 向内存中写入 字符串 , 字符串内容是 i + 1// 注意是通过通配符拼装的字符串sprintf(p[i], "%d", i + 1);}return p;}/*** @brief 打印二维指针数据* @param array* @param num*/void printf_array(char **array, int num){// 循环控制变量int i = 0;// 判定指针合法性if(array == NULL){return;}// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串for(i = 0; i < num; i++){printf("%s\n", array[i]);}}/*** @brief 二维指针排序* @param p* @param num* @return*/int sort_array(char **p, int num){// 循环控制变量int i = 0, j = 0;// 排序时 , 交换指针 , 该指针是存储 要 交换指针 的临时变量char *tmp = NULL;// 判定指针合法性if(p == NULL){return -1;}// 对 二维指针 指向的数据进行排序for(i = 0; i < num; i++){for(j = i + 1; j < num; j++){// 交换 i , j 指针指向的内存数据// 从 大 到 小 进行排序if(strcmp(p[i], p[j]) < 0){tmp = p[i];p[i] = p[j];p[j] = tmp;}}}return 0;}/*** @brief 释放二维指针内存* @param p* @param num*/void free_mem(char **p, int num){// 循环控制变量int i = 0;// 判定指针合法性if(p == NULL){return;}// 释放内存// 先释放 num 个 一级指针for(i = 0; i < num; i++){if(p[i] != NULL){free(p[i]);p[i] = NULL;}}// 再释放 二级指针if(p != NULL){free(p);}}/*** @brief 主函数入口* @return*/int main(){// 二维指针 指向的 一维指针 个数int num = 4;// 声明二维指针char **p = NULL;// 循环控制变量int i = 0, j = 0;// 排序时 , 交换指针 , 该指针是存储 要 交换指针 的临时变量char *tmp = NULL;// 在堆内存中 , 分配一块内存空间// 用于存储 num 个 一维指针// 每个 一维指针 指向一块内存空间p = generate_memory(num);// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串printf_array(p, num);// 对 二维指针 指向的数据进行排序sort_array(p, num);// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串printf("\nSort : \n");printf_array(p, num);// 释放内存free_mem(p, num);// 命令行不要退出system("pause");return 0;}

执行结果 :

如果觉得《【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。