【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )
2023-06-13 09:18:00 时间
文章目录
一、二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 )
在上一篇博客 【C 语言】二级指针作为输入 ( 二维指针 | 为 二维指针 分配内存 - 存放 一维指针 | 为每个 一维指针 分配内存 | 释放二维指针内存 ) 基础上 , 对 二维指针 指向的 若干 一维指针 指向的数据 进行排序 ;
首先 , 准备好了循环控制变量 , 和 排序 交换 时 , 使用的 中间变量 ;
- 循环控制变量 : 排序一般需要定义两个变量 ;
// 循环控制变量
int i = 0, j = 0;
- 排序时 , 交换指针指向的内存数据 , 该数组是存储 要 交换内存数据 的临时变量 ;
// 排序时 , 交换指针指向的内存数据
// 该数组是存储 要 交换内存数据 的临时变量
char tmp[30];
然后 , 对二维指针指向的数据 , 进行排序 ; 涉及到使用 strcmp
函数 , 参考 【C 语言】二级指针作为输入 ( 指针数组 | 指针数组排序 | 字符串排序 | strcmp 函数 ) 一、strcmp 函数 博客章节 , 进行理解 ;
// 对 二维指针 指向的数据进行排序
for(i = 0; i < num; i++)
{
for(j = i + 1; j < num; j++)
{
// 交换 i , j 指针指向的内存数据
// 从 大 到 小 进行排序
if(strcmp(p[i], p[j]) < 0)
{
strcpy(tmp, p[i]);
strcpy(p[i], p[j]);
strcpy(p[j], tmp);
}
}
}
二、完整代码示例
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 二维指针 指向的 一维指针 个数
int num = 4;
// 声明二维指针
char **p = NULL;
// 循环控制变量
int i = 0, j = 0;
// 排序时 , 交换指针 , 该指针是存储 要 交换指针 的临时变量
//char *tmp = NULL;
// 排序时 , 交换指针指向的内存数据
// 该数组是存储 要 交换内存数据 的临时变量
char tmp[30];
// 在堆内存中 , 分配一块内存空间
// 用于存储 num 个 一维指针
// 每个 一维指针 指向一块内存空间
p = (char **)malloc( sizeof(char*) * num );
// 遍历 二维指针 指向的多个 一维指针
// 并为每个 一维指针 在堆内存中 分配 20 字节内存
for(i = 0; i < num; i++)
{
// 为每个字符分配 20 字节空间
p[i] = (char *)malloc(sizeof (char) * 20);
// 向内存中写入 字符串 , 字符串内容是 i + 1
// 注意是通过通配符拼装的字符串
sprintf(p[i], "%d", i + 1);
}
// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串
for(i = 0; i < num; i++)
{
printf("%s\n", p[i]);
}
// 对 二维指针 指向的数据进行排序
for(i = 0; i < num; i++)
{
for(j = i + 1; j < num; j++)
{
// 交换 i , j 指针指向的内存数据
// 从 大 到 小 进行排序
if(strcmp(p[i], p[j]) < 0)
{
strcpy(tmp, p[i]);
strcpy(p[i], p[j]);
strcpy(p[j], tmp);
}
}
}
// 打印字 二维指针 指向的 num 个 一维数组 指向的 字符串
printf("\nSort : \n");
for(i = 0; i < num; i++)
{
printf("%s\n", p[i]);
}
// 释放内存
// 先释放 num 个 一级指针
for(i = 0; i < num; i++)
{
if(p[i] != NULL)
{
free(p[i]);
p[i] = NULL;
}
}
// 再释放 二级指针
if(p != NULL)
{
free(p);
}
// 命令行不要退出
system("pause");
return 0;
}
执行结果 :
相关文章
- Memcache内存分配机制
- 漫画大数据:如何解决 NameNode 内存持续增长的问题(三)
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 抽象业务逻辑函数 )
- 深入探讨Linux内存实验(linux内存实验)
- 使用Redis轻松实现内存数据库存储(redis内存数据库)
- 内存管理XCB: Linux内存管理利器(xcblinux)
- Oracle数据库内存使用率突然攀升(Oracle内存突增)
- 腾讯推出全新手机,Redis助力内存性能升级(腾讯手机redis)
- 探索Redis内存利用率如何更好地优化(查看redis内存利用率)
- 研究Redis键值内存的实用分析技巧(redis键值内存分析)
- 使用Redis优化内存配置更大的内存空间(redis 配置内存大小)
- 养成良好的C++编程习惯之内存管理的应用详解