文章目录
一、二维数组
1、二维数组声明及初始化
2、二维数组遍历
3、二维数组排序
二、完整代码示例
一、二维数组
前几篇博客中 , 介绍的是指针数组 ;
指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;
二维数组 与 指针数组 的结构不同 , 二维数组 的 内存结构 是整齐的连续的 内存块 , 每个 一维指针 指向的内存块 的大小都是相同的 , 并且这些内存块 还是连续的 ;
1、二维数组声明及初始化
二维数组声明及初始化 :
// I. 二维数组 char array[4][10] = {"abc", "123", "258", "sfd"}
2、二维数组遍历
二维数组遍历 :
// II. 打印二维数组中的字符串 for(i = 0; i < num; i++) { // 使用数组下标形式访问 printf("%s\n", array[i]); // 使用指针访问 //printf("%s\n", *(array + i)); }
3、二维数组排序
二维数组排序 : 对二维数组进行排序 , 不能单纯的交换指针指向 , 二维数组是一块整体连续的内存 , 必须对内存中存储的实际数据进行整体位置交换 ;
// III. 二维数组排序
// 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比 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); } } }
二、完整代码示例
完整代码示例 :
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { // 循环控制变量 int i = 0, j = 0; // 二维数组中的一维数组个数 int num = 4; // 排序时 , 交换指针变量时的临时变量 , 存储指针指向的内存所存储的数据 char tmp[10]; // I. 二维数组 char array[4][10] = {"abc", "123", "258", "sfd"}; // II. 打印二维数组中的字符串 for(i = 0; i < num; i++) { // 使用数组下标形式访问 printf("%s\n", array[i]); // 使用指针访问 //printf("%s\n", *(array + i)); } // III. 二维数组排序 // 对 指针数组 进行排序 , 排序依据是 指针 指向的数据对比 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); } } } // IV. 打印二维数组中的字符串 printf("\nSort:\n"); for(i = 0; i < num; i++) { // 使用数组下标形式访问 printf("%s\n", array[i]); // 使用指针访问 //printf("%s\n", *(array + i)); } // 命令行不要退出 system("pause"); return 0; }
执行结果 :