文章目录
一、抽象 二维数组 业务函数
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; }
执行结果 :