文章目录

  • 一、抽象 二维数组 业务函数
    • 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 语言】二级指针作为输入 ( 二维数组 | 抽象业务函数 | 二维数组打印函数 | 二维数组排序函数 )相关推荐

  1. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针排序 | 通过 交换指针指向的内存数据 方式进行排序 )

    文章目录 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针指向的内存数据 方式进行排序 ) 在上一篇博客 [C 语言]二 ...

  2. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 二级指针 排序 | 通过 交换指针方式 进行排序 )

    文章目录 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 二.完整代码示例 一.二维指针 排序 ( 通过 交换指针方式 进行排序 ) 在上一篇博客 [C 语言]二级指针作为输入 ( 二维指针 ...

  3. 二级指针做输入_第2种内存模型

    #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <std ...

  4. 关于C语言二级指针正确使用总结

    关于C语言二级指针正确使用总结 什么是二级指针 C语言中的二级指针其实就是指向指针的指针,指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链.同理可以构建三级或者N级指针,但是一般情况下用不到 ...

  5. c语言二级指针实现队列,C语言二级指针底层实现

    C语言中,Pointers to Pointers,即二级指针. 一级指针和二级指针的值都是指向一个内存单元: 一级指针指向的内存单元存放的是源变量的值, 二级指针指向的内存单元存放的是一级指针的地址 ...

  6. C语言二级指针内存模型建立

    C语言二级指针内存模型建立 代码 解析 代码 void main() {int i = 0;//指针数组char * p1[] = {"123", "456"

  7. [C语言]使用指针将输入的多个字符串按大小升序排序

    [C语言]使用指针将输入的多个字符串按大小升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按大小升序排序 要求:子函数 void StrSort(char ...

  8. [C语言]使用指针将输入的多个字符串按长度升序排序

    [C语言]使用指针将输入的多个字符串按长度升序排序 1.题目 2.完整代码 3.截图 1.题目 编写一个函数,利用指针将输入的多个字符串按长度升序排序 要求:子函数 void StrSort(char ...

  9. 【C 语言】二级指针作为输入 ( 自定义二级指针内存 | 为 二级指针 分配内存 - 存放 一维指针 | 为每个 一级指针 分配内存 | 释放二维指针内存 )

    文章目录 一.二级指针 1.为 二维指针 分配内存 2.为每个 一维指针 分配内存 3.释放 二维指针 内存 二.完整代码示例 一.二级指针 声明二级指针 : // 声明二维指针char **p = ...

最新文章

  1. XML – E4X概述
  2. 北大女生拿下阿里数学预赛第一名!决赛入围率不到1%,最小晋级选手只有14岁...
  3. 65个技巧性回答,终身受用
  4. 动态规划之——最长公共子序列(nyoj36)
  5. 围绕央行系统升级所产生的常见问题
  6. ubuntu安装可加速播放打视频播放器vlc
  7. Linux开机启动过程(3):显示模式初始化和进入保护模式
  8. 【Java数据结构】二叉排序树
  9. 容器技术Docker K8s 17 容器服务ACK基础与进阶-容器网络管理
  10. 破解使用radius实现802.1x认证的企业无线网络
  11. 终端安全防护技术研究(一)
  12. 如何自学CAD制图?学会这5个方法,只需一周就能从小白变大神
  13. 腾达和小云无线路由中继(WISP)解决
  14. 数据结构与算法36-联接最大数
  15. byte最大值最小值的问题
  16. Redis源码阅读笔记(二)list双向链表结构
  17. 人力资源外包(HRO)服务市场现状研究分析-
  18. has no exported member
  19. K7+6678信号处理板 方案 原理图 pcb
  20. MongoDB命令 日期查询

热门文章

  1. C语言成长学习题(十六)
  2. java jdk缓存-128~127的Long与Integer
  3. 我的C#文章模块代码
  4. 老板,请给我多点培养【写给老板的一封信】
  5. Dinic最大流 || Luogu P3376 【模板】网络最大流
  6. java中后端拼接字符串返回前台页面换行显示
  7. 如何开启mysql5.5的客户端服务 命令行打开方法
  8. TCP/IP详解 笔记八
  9. [翻译] JTCalendar
  10. Flex前端与Java服务端交互,反射机制挑大旗