在 C/C++ 中處理字串陣列或指標陣列時,常見做法是傳遞陣列長度或使用特定結束標記。利用 NULL(空指標)作為哨兵值,可省去額外長度參數,簡化循環邏輯,減少堆疊記憶體使用與運算開銷。
#include <iostream>
using namespace std;
void print_char(char* array[]); // 函式宣告
int main() {
// 陣列以 NULL 結尾,標記結束
char* test[] = { "abc", "cde", "fgh", NULL };
print_char(test);
cin.get();
return 0;
}
void print_char(char* array[]) {
while (*array != NULL) { // 直接檢查指標值
cout << *array++ << endl; // 列印並移動到下一個指標
}
}
test 在記憶體中連續儲存四個指標:"abc"、"cde"、"fgh"、NULL(值為 0)。char* array[] 退化為 char** array,接收首元素地址。*array 取得當前字串指標,!= NULL 判斷是否結束,*array++ 後置遞增移動指標陣列位置。size 或 count。NULL 結尾。NULL 結尾,否則會越界讀取導致未定義行為。std::vector 或 std::span (C++20) 獲得更安全的介面。空指標哨兵是 C 風格程式碼中簡潔高效的慣用技巧,特別適合嵌入式系統或追求極致效能的場景。理解其原理有助於閱讀經典代碼庫,並在受限環境下靈活運用。