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

C 語言函數參數:陣列與指標的傳遞機制深度解析

     編輯:程式設計綜合問答

核心結論

C 語言函數參數可以使用陣列語法,但編譯器會將其隱式轉換為指標。以下三種宣告等價:

void func(int arr[]);
void func(int arr[10]);  // 大小被忽略
void func(int *arr);     // 實際型別

為何會有「不能使用陣列」的誤解?

  • sizeof 運算子:在函數內部 sizeof(arr) 回傳指標大小而非陣列總大小。
  • 賦值限制:陣列名稱不可作為左值(arr = NULL 錯誤),指標可重新指向。
  • 多維陣列:void func(int a[][COL]) 僅第一維退化為指標,第二維需為常數。

實務選擇指南

場景建議寫法理由
單維陣列唯讀const int *arr 或 const int arr[]語意明確,防止意外修改
需修改內容int *arr + size_t len配合長度參數避免越界
二維陣列int (*arr)[COL] 或 int arr[][COL]保留行步長資訊
動態大小int **arr + 雙重指標配置適合執行期決定維度

程式碼範例:正確計算最大值

int getmax(const int *nums, size_t n) {
    int max = nums[0];
    for (size_t i = 1; i < n; ++i)
        if (nums[i] > max) max = nums[i];
    return max;
}

// 呼叫端
int data[] = {3, 1, 4, 1, 5};
int m = getmax(data, sizeof(data)/sizeof(data[0]));

總結

函數參數使用「陣列語法」實為「指標語法」的語法糖。開發者應明確傳遞長度、善用 const、理解多維陣列退化規則,才能撰寫安全高效的 C 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved