【C 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )
文章目录
- 一、抽象 二维数组 业务函数
- 1、二维数组 打印函数
- 2、二维数组 排序函数
- 二、完整代码示例
一、抽象 二维数组 业务函数
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 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )相关推荐
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )
文章目录 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 在上一篇博客 [C 语言]二 ...
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )
文章目录 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 在上一篇博客 [C 语言]二级指针作为输入 ( 二维指针 ...
- 二级指针做输入_第2种内存模型
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <std ...
- 关于C语言二级指针正确使用总结
关于C语言二级指针正确使用总结 什么是二级指针 C语言中的二级指针其实就是指向指针的指针,指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.同理可以构建三级或者N级指针,但是一般情况下用不到 ...
- c语言二级指针实现队列,C语言二级指针底层实现
C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址 ...
- C语言二级指针内存模型建立
C语言二级指针内存模型建立 代码 解析 代码 void main() {int i = 0;//指针数组char * p1[] = {"123", "456"
- [C语言]使用指针将输入的多个字符串按大小升序排序
[C语言]使用指针将输入的多个字符串按大小升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按大小升序排序 要求:子函数 void StrSort(char ...
- [C语言]使用指针将输入的多个字符串按长度升序排序
[C语言]使用指针将输入的多个字符串按长度升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按长度升序排序 要求:子函数 void StrSort(char ...
- 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )
文章目录 一.二级指针 1.为 二维指针 分配内存 2.为每个 一维指针 分配内存 3.释放 二维指针 内存 二.完整代码示例 一.二级指针 声明二级指针 : // 声明二维指针char **p = ...
最新文章
- XML – E4X概述
- 北大女生拿下阿里数学预赛第一名!决赛入围率不到1%,最小晋级选手只有14岁...
- 65个技巧性回答,终身受用
- 动态规划之——最长公共子序列(nyoj36)
- 围绕央行系统升级所产生的常见问题
- ubuntu安装可加速播放打视频播放器vlc
- Linux开机启动过程(3):显示模式初始化和进入保护模式
- 【Java数据结构】二叉排序树
- 容器技术Docker K8s 17 容器服务ACK基础与进阶-容器网络管理
- 破解使用radius实现802.1x认证的企业无线网络
- 终端安全防护技术研究(一)
- 如何自学CAD制图?学会这5个方法,只需一周就能从小白变大神
- 腾达和小云无线路由中继(WISP)解决
- 数据结构与算法36-联接最大数
- byte最大值最小值的问题
- Redis源码阅读笔记(二)list双向链表结构
- 人力资源外包(HRO)服务市场现状研究分析-
- has no exported member
- K7+6678信号处理板 方案 原理图 pcb
- MongoDB命令 日期查询