首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C 語言指標陣列傳遞與字串列印:蘇小紅教材第 11 章習題完整解析

     編輯:程式設計疑難解答

教材經典習題:char *pArray[] = {"How", "are", "you"}; 計算字串個數並逐一列印。核心考點:指標陣列作為函式參數退化為 char **,配合 sizeof 計算元素個數。

標準解答代碼

#include <stdio.h>

void Print(char *arr[], int len);

int main() {
    char *pArray[] = {"How", "are", "you"};
    int num = sizeof(pArray) / sizeof(char *); // 3
    printf("Total string numbers = %d\n", num);
    Print(pArray, num);
    return 0;
}

void Print(char *arr[], int len) {
    for (int i = 0; i < len; i++) {
        printf("%s ", arr[i]);
    }
    printf("\n");
}

關鍵知識點拆解

  1. sizeof 在陣列定義處有效:sizeof(pArray) = 3 * 指標大小 (24 bytes on x64);傳入函式後退化為指標,sizeof(arr) 僅為指標大小 (8 bytes),必須額外傳長度。
  2. 字串常量區:"How" 等字面值儲存在唯讀資料段,pArray 存放其首地址。
  3. 指標陣列 vs 二維陣列:
    char *p[] = {"abc", "def"};      // 指標陣列,行長度不固定
    char str[][4] = {"abc", "def"};   // 二維陣列,每行固定 4 bytes

進階變體:動態字串陣列

// 執行期決定字串數量
char **dynamic = malloc(n * sizeof(char *));
for (int i = 0; i < n; i++) {
    dynamic[i] = strdup(input_strings[i]); // 複製字串到堆疊
}
// 使用完畢釋放
for (int i = 0; i < n; i++) free(dynamic[i]);
free(dynamic);

除錯技巧

  • 在 Print 內打印 arr[i] 位址與 strlen(arr[i]),確認指標有效性
  • Valgrind/AddressSanitizer 檢測記憶體洩漏與越界
指標陣列是 C 語言處理不定長字串集合的標準模式,掌握「定義處 sizeof 計長、函式傳長、逐元素解引用」三部曲,即可輕鬆應對教材所有相關習題。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved