對 {1,2,3,4,5} 反轉為 {5,4,3,2,1},雙指標對稱交換:
for (int i = 0; i < SIZE/2; i++) {
int tmp = arr[i];
arr[i] = arr[SIZE - i - 1];
arr[SIZE - i - 1] = tmp;
}
i == SIZE/2 不需交換。i < SIZE/2 自然涵蓋所有配對。字串 = 字元陣列 + '\0' 結尾。直接套用整數反轉會把 '\0' 移到索引 0,導致字串視覺長度為 0,後續內容雖在記憶體中但不可見,甚至造成緩衝區讀取錯誤。
'\0' 前的子陣列)char str[SIZE] = "China";
int len = 0;
while (str[len] != '\0') len++; // 或用 strlen(str)
for (int i = 0; i < len/2; i++) {
char tmp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = tmp;
}
// str 變為 "anihC"
#include <stdio.h>
#define SIZE 10
int main() {
char st[SIZE] = "China";
int len = 0;
while (st[len] != '\0') len++;
for (int i = 0; i < len/2; i++) {
char tmp = st[i];
st[i] = st[len - i - 1];
st[len - i - 1] = tmp;
}
puts(st); // 輸出: anihC
return 0;
}
若需對多字串排序,建立 char *arr[] 指向各字串,對指標陣列排序(交換指標而非複製字串),效率高且程式碼簡潔。
字串反轉的核心在於識別有效長度(排除 NUL),再套用雙指標對稱交換。此思維「計算子陣列長度 → 套用通用演算法」是解決字串操作問題的通用模式,亦可延伸至字串排序、去重等任務。