C 語言二維字元陣列排序:strcpy 逐字元複製與指標陣列排序效能對比
二維陣列結構
char arr[10][30] = {"aaaa","dddd","aac","bbbb","1121213"};
// 記憶體連續: arr[0] 佔 30 位元組, arr[1] 緊接其後...
// arr[i] 相當於 *(arr + i),但編譯器知道每列寬度 30
排序必須複製內容
void sort_2d(char arr[][30], int n) {
char tmp[30];
for (int i=0; i 0) {
strcpy(tmp, arr[j]);
strcpy(arr[j], arr[j+1]);
strcpy(arr[j+1], tmp);
}
}
與指標陣列對比
| 維度 | 二維陣列 char[][30] | 指標陣列 char *[] |
| 記憶體佈局 | 連續塊,固定列寬 | 指標陣列連續,字串分散 |
| 排序操作 | strcpy 複製內容 | 交換指標 |
| 字串長度 | 受限於列寬 (30) | 動態,任意長度 |
| 效能 | O(n² * L) 複製開銷 | O(n²) 僅指標交換 |
| 適用場景 | 嵌入式固定緩衝區、小字串 | 通用、大字串、動態分配 |
完整測試程式
#include <stdio.h>
#include <string.h>
void print_2d(char a[][30], int n) {
for (int i=0; i
選擇建議
- 字串長度固定、數量少、嵌入式環境:二維陣列簡單。
- 字串長度不一、追求效能、需動態增刪:指標陣列 + malloc。
- C++ 直接用
std::vector + std::sort。