【C 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )
文章目录
- 一、打印 指针数组 中指针指向的字符串
- 二、字符串排序
- 三、代码示例
一、打印 指针数组 中指针指向的字符串
打印 指针数组 中指针指向的字符串 :
- 指针退化问题 : 传入二级指针 , 同时还要传入 一级指针的个数 ; 实参是 指针数组 , 形参 退化为 二级指针 , 需要人为指定 数组的元素个数 ;
- 验证指针合法性 : 函数中 , 只要是指针 , 就有可能为 NULL , 函数入口就要验证该指针合法性 ;
/** 打印函数*/
int printf_array(char **array, int num)
{// 验证指针合法性if(array == NULL || num <= 0){printf("error : array == NULL || num <= 0\n");return -1;}// 循环控制变量int i = 0;// 打印上述数组for(i = 0; i < num; i++){// 使用 数组下标 与 指针 进行遍历 , 效果相同//printf("%s\n", array[i]);printf("%s\n", *(array + i));}return 0;
}
二、字符串排序
将 指针数组 作为参数 , 传入函数中 ;
函数的 二级指针 形参 , 既要作为 输入 , 又要作为输出 ;
int sort_array(char **array, int num)
{// 验证指针合法性if(array == NULL || num <= 0){printf("error : array == NULL || num <= 0\n");return -1;}// 循环控制变量int i = 0, j = 0;// 排序时 , 交换指针变量时的临时变量char *tmp;// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比for(i = 0; i < num; i++){for(j = i; j < num; j++){// 核心逻辑 : 如果 array[i] 大于 array[j]// 就交换两个元素if(strcmp(array[i], array[j]) > 0){// 交换 i, j 位置的指针变量tmp = array[i];array[i] = array[j];array[j] = tmp;}}}return 0;
}
三、代码示例
完整代码示例 :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>/** 打印函数*/
int printf_array(char **array, int num)
{// 验证指针合法性if(array == NULL || num <= 0){printf("error : array == NULL || num <= 0\n");return -1;}// 循环控制变量int i = 0;// 打印上述数组for(i = 0; i < num; i++){// 使用 数组下标 与 指针 进行遍历 , 效果相同//printf("%s\n", array[i]);printf("%s\n", *(array + i));}return 0;
}int sort_array(char **array, int num)
{// 验证指针合法性if(array == NULL || num <= 0){printf("error : array == NULL || num <= 0\n");return -1;}// 循环控制变量int i = 0, j = 0;// 排序时 , 交换指针变量时的临时变量char *tmp;// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比for(i = 0; i < num; i++){for(j = i; j < num; j++){// 核心逻辑 : 如果 array[i] 大于 array[j]// 就交换两个元素if(strcmp(array[i], array[j]) > 0){// 交换 i, j 位置的指针变量tmp = array[i];array[i] = array[j];array[j] = tmp;}}}return 0;
}void main()
{// 循环控制变量int i = 0, j = 0;// 数组大小int num = 0;// 排序时 , 交换指针变量时的临时变量char *tmp;/** 复杂指针阅读* 参考 https://blog.csdn.net/shulianghan/article/details/121453520 和* https://hanshuliang.blog.csdn.net/article/details/78568351#3____________________2803* 博客章节进行阅读** 复杂指针解析流程 :* 1. 中心标识符是 array* 2. 先往右看 , 遇到 [] , 说明这是一个数组 , 挖掉 array[] 内容 , 然后调转方向往左看* 3. 发现是 * , 说明数组中的元素是指针 , 挖掉 * , 往右看没内容 , 往左看* 4. 发现是 char , 说明指针指向的数据是 char 类型** array 是一个数组 , 数组中的元素的 char * 字符串** 这是 指针数组 , 数组元素 是 指针*/char *array[] = {"abc", "123", "258", "sfd"};// 计算数组大小num = sizeof(array) / sizeof(array[0]);// 打印数组printf_array(array, num);// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比sort_array(array, num);// 打印排序后的数组printf("\nSort:\n");printf_array(array, num);// 命令行不要退出system("pause");return;
}
执行结果 :
【C 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )相关推荐
- C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。
/*C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果.*/#include <stdio.h> #include <conio.h& ...
- C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765
https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...
- c语言字符数组给字符指针,C语言常见有关问题之字符串数组和字符指针数组有关问题...
C语言常见问题之字符串数组和字符指针数组问题 通过如下的实例来讲解这个问题: #include int main(void) { char a[3][4] = {"123", &q ...
- 2020.1.13 C语言学习 结构体+结构体数组+结构体指针
结构体 结构体的形式 struct 结构体名称 { 结构体成员1; 结构体成员2; - }; 例如: 图书的结构体 struct Book {char title[128];char author[4 ...
- python一次性输入多个数_python如何利用input函数输入多个参数?
python进行交互式输入过程中,一般使用input()函数来接受键盘的输入. 如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有 ...
- python中input同时输入多个_python如何利用input函数输入多个参数?
如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有一些帖子,但是总是没有讲到要点,这里解析如下. 关键知识点: 1.input函数 ...
- java输入字符数组_JAVA中怎样把用户输入的字符串存入数组中?
展开全部 import java.util.Scanner; import java.util.InputMismatchException; public class saveInputToArr ...
- C语言输入数字出现相应答案,写一个函数 输入一个十六进制数,输出相应的十进制数。...
C语言写一个函数,输入一个十六进制数,输出相应的十进制数. [c源程序] #include #define MAX 1000 int main() { int htoi(char s[]); int ...
- arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值
系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...
最新文章
- 手机扫一扫就能“隔空移物”?AR炫酷新玩法,快来解锁新技能吧!
- UGUI组件之ScrollRect 组件简单笔记(Scroll View)
- DM9000 寄存器的定义
- sun.misc.Unsafe和堆外内存
- 数据管理与商业智能_商业智能与数据科学
- Pandas 文本数据方法 startswith( ) endwith( )
- 【Oracle】RAC集群中的命令
- 《程序员面试宝典》中的一些面试题
- FPGA入门之一位全加器的实现
- Warez出品的精品动画,近25万倍的压缩,大小仅有64K的
- leach算法的实现过程_leach算法原理详解
- SQL Server 2008 中文企业版下载
- excel中如何实现自动求和?
- idea 查看源码 /* compiled code*/
- UI设计中图形设计详解
- ubuntu禁止自动锁屏
- 这8种恶心虫子 你可能每天都在吃!
- 2014腾讯校园招聘实习笔试题
- 深度解析Linux通过日志反查入侵
- python3.6实现随机森林算法(可视化)机器学习算法(赵志勇)学习笔记
热门文章
- Using mongoDB's Profiler analyze the performance of database operations
- 模拟 CSU 1562 Fun House
- windows phone 快捷键
- Lintcode 167. 链表求和 221. 链表求和 II 题解
- JS选中OPTION
- awk 统计数据在文件中的出现次数
- jQuery Alert Dialogs (Alert, Confirm, Prompt Replacements)(翻译)
- 删除桌面上淘宝商城,高清电影,精彩小游戏图标
- 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
- Spark MLlib 机器学习