【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
2023-06-13 09:18:00 时间
文章目录
一、抽象 二维数组 业务函数
1、二维数组 打印函数
注意 , 二维数组 作为 函数参数 输入到函数中 , 不能传入 二维指针 ;
此处遍历时 , 注意指针的步长 ,传入一个二级指针 char **
, 会出错 , 如果传入 二级指针 , array[i]
等同于 *(array + i)
, array
的步长是 10
;
这里将 函数形参 定义为 char array[4][10]
;
代码示例 :
/*
* 此处遍历时 , 注意指针的步长 ,
* 传入一个二级指针 char ** , 会出错
* 如果传入 二级指针 ,
* array[i] 等同于 *(array + i)
* array 的步长是 10
*/
int print_str(char array[4][10], int num)
{
// 循环控制变量
int i = 0;
// 判断指针合法性
if(array == NULL)
{
printf("array == NULL\n");
return -1;
}
// 打印二维数组中的字符串
for(i = 0; i < num; i++)
{
// 使用数组下标形式访问
printf("%s\n", array[i]);
// 使用指针访问
//printf("%s\n", *(array + i));
}
return 0;
}
2、二维数组 排序函数
二维数组排序时 , 也不能传入二维指针作为形参 , 需要传入 char array[4][10]
作为形参 ;
代码示例 :
/*
* 二维数组
*/
int sort_array(char array[4][10], int num)
{
// 循环控制变量
int i = 0, j = 0;
// 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
char tmp[10];
// 判断指针合法性
if(array == NULL)
{
printf("array == NULL\n");
return -1;
}
// 二维数组排序
// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
for(i = 0; i < num; i++)
{
for(j = i + 1; j < num; j++)
{
// 核心逻辑 : 如果 array[i] 大于 array[j]
// 就交换两个元素
if(strcmp(array[i], array[j]) > 0)
{
// 交换 i, j 位置的指针指向的内存数据
strcpy(tmp, array[i]);
strcpy(array[i], array[j]);
strcpy(array[j], tmp);
}
}
}
return 0;
}
二、完整代码示例
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*
* 此处遍历时 , 注意指针的步长 ,
* 传入一个二级指针 char ** , 会出错
* 如果传入 二级指针 ,
* array[i] 等同于 *(array + i)
* array 的步长是 10
*/
int print_str(char array[4][10], int num)
{
// 循环控制变量
int i = 0;
// 判断指针合法性
if(array == NULL)
{
printf("array == NULL\n");
return -1;
}
// 打印二维数组中的字符串
for(i = 0; i < num; i++)
{
// 使用数组下标形式访问
printf("%s\n", array[i]);
// 使用指针访问
//printf("%s\n", *(array + i));
}
return 0;
}
/*
* 二维数组
*/
int sort_array(char array[4][10], int num)
{
// 循环控制变量
int i = 0, j = 0;
// 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
char tmp[10];
// 判断指针合法性
if(array == NULL)
{
printf("array == NULL\n");
return -1;
}
// 二维数组排序
// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
for(i = 0; i < num; i++)
{
for(j = i + 1; j < num; j++)
{
// 核心逻辑 : 如果 array[i] 大于 array[j]
// 就交换两个元素
if(strcmp(array[i], array[j]) > 0)
{
// 交换 i, j 位置的指针指向的内存数据
strcpy(tmp, array[i]);
strcpy(array[i], array[j]);
strcpy(array[j], tmp);
}
}
}
return 0;
}
int main()
{
// 循环控制变量
int i = 0, j = 0;
// 二维数组中的一维数组个数
int num = 4;
// 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据
char tmp[10];
// I. 二维数组
char array[4][10] = {"abc", "123", "258", "sfd"};
// II. 打印二维数组中的字符串
print_str(array, num);
// III. 二维数组排序
// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比
sort_array(array, num);
// IV. 打印二维数组中的字符串
printf("\nSort:\n");
print_str(array, num);
// 命令行不要退出
system("pause");
return 0;
}
执行结果 :
相关文章
- c语言scanf函数用法详解_c语言输入scanf格式
- 【测开技能】Java语言系列(九)输入和输出
- 苹果绕id完美重启_iphone重启要输入id密码
- Ubuntu被曝严重漏洞:切换系统语言+输入几行命令,就能获取root权限
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )
- jQuery限制TextArea里输入字符个数详解编程语言
- go语言之用户输入&类型别名&类型转换详解编程语言
- Linux下无法输入斜杠的解决方法(linux无法输入)
- Linux串口双向通信:从输入到输出的流畅之旅(linux串口同时读写)
- Linux系统快速输入汉字的好方法(linux打汉字)
- MySQL中不支持中文输入(mysql中不能输中文)
- MySQL中如何避免重复数据输入(mysql中不允许重复)
- 处理使用Redis轻松实现中文输入处理(redis 输入中文)
- PHP输入流php://input介绍
- 两种方法实现文本框输入内容提示消失
- 实现只能输入数字的input不用replace方法
- Java字符终端上获取输入三种的方式分享
- Android文本输入框(EditText)输入密码时显示与隐藏