文章目錄
- 一、二維數組
- 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;
}
執行結果 :