文章目录

  • 一、打印 指针数组 中指针指向的字符串
  • 二、字符串排序
  • 三、代码示例

一、打印 指针数组 中指针指向的字符串


打印 指针数组 中指针指向的字符串 :

  • 指针退化问题 : 传入二级指针 , 同时还要传入 一级指针的个数 ; 实参是 指针数组 , 形参 退化为 二级指针 , 需要人为指定 数组的元素个数 ;
  • 验证指针合法性 : 函数中 , 只要是指针 , 就有可能为 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 语言】二级指针作为输入 ( 指针数组 | 将 二级指针 作为函数输入 | 抽象函数业务逻辑 )相关推荐

  1. C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果。

    /*C语言:用二维字符数组的每行存储键盘输入的字符串,将这些字符串按字典顺序升序排序,输出排序后的结果.*/#include <stdio.h> #include <conio.h& ...

  2. C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? https://www.zhihu.com/question/30838092/answer/49623765

    https://www.zhihu.com/question/30838092/answer/49623765 C++通过基类指针delete派生类数组,析构函数是虚函数,程序为什么会崩溃? 代码如下 ...

  3. c语言字符数组给字符指针,C语言常见有关问题之字符串数组和字符指针数组有关问题...

    C语言常见问题之字符串数组和字符指针数组问题 通过如下的实例来讲解这个问题: #include int main(void) { char a[3][4] = {"123", &q ...

  4. 2020.1.13 C语言学习 结构体+结构体数组+结构体指针

    结构体 结构体的形式 struct 结构体名称 { 结构体成员1; 结构体成员2; - }; 例如: 图书的结构体 struct Book {char title[128];char author[4 ...

  5. python一次性输入多个数_python如何利用input函数输入多个参数?

    python进行交互式输入过程中,一般使用input()函数来接受键盘的输入. 如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有 ...

  6. python中input同时输入多个_python如何利用input函数输入多个参数?

    如果考虑这样的应用: 程序需要多个参数,并且希望每输入一个参数就进行换行,即希望一次输入多个参数. 关于这样问题网络上有一些帖子,但是总是没有讲到要点,这里解析如下. 关键知识点: 1.input函数 ...

  7. java输入字符数组_JAVA中怎样把用户输入的字符串存入数组中?

    展开全部 import java.util.Scanner; import java.util.InputMismatchException; public class saveInputToArr ...

  8. C语言输入数字出现相应答案,写一个函数 输入一个十六进制数,输出相应的十进制数。...

    C语言写一个函数,输入一个十六进制数,输出相应的十进制数. [c源程序] #include #define MAX 1000 int main() { int htoi(char s[]); int ...

  9. arrays中copyof复制两个数组_C语言100题集合026-使用指针交换两个数组中的最大值

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞.转发.收藏哦- 后续C语言经典100例将会以pdf和代码的形式发放到公众号 欢迎关注:计算广告生态 即 ...

最新文章

  1. 手机扫一扫就能“隔空移物”?AR炫酷新玩法,快来解锁新技能吧!
  2. UGUI组件之ScrollRect 组件简单笔记(Scroll View)
  3. DM9000 寄存器的定义
  4. sun.misc.Unsafe和堆外内存
  5. 数据管理与商业智能_商业智能与数据科学
  6. Pandas 文本数据方法 startswith( ) endwith( )
  7. 【Oracle】RAC集群中的命令
  8. 《程序员面试宝典》中的一些面试题
  9. FPGA入门之一位全加器的实现
  10. Warez出品的精品动画,近25万倍的压缩,大小仅有64K的
  11. leach算法的实现过程_leach算法原理详解
  12. SQL Server 2008 中文企业版下载
  13. excel中如何实现自动求和?
  14. idea 查看源码 /* compiled code*/
  15. UI设计中图形设计详解
  16. ubuntu禁止自动锁屏
  17. 这8种恶心虫子 你可能每天都在吃!
  18. 2014腾讯校园招聘实习笔试题
  19. 深度解析Linux通过日志反查入侵
  20. python3.6实现随机森林算法(可视化)机器学习算法(赵志勇)学习笔记

热门文章

  1. Using mongoDB's Profiler analyze the performance of database operations
  2. 模拟 CSU 1562 Fun House
  3. windows phone 快捷键
  4. Lintcode 167. 链表求和 221. 链表求和 II 题解
  5. JS选中OPTION
  6. awk 统计数据在文件中的出现次数
  7. jQuery Alert Dialogs (Alert, Confirm, Prompt Replacements)(翻译)
  8. 删除桌面上淘宝商城,高清电影,精彩小游戏图标
  9. 关于org.apache.lucene.queryParser.ParseException: Encountered 解决方法
  10. Spark MLlib 机器学习