首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言函數參數傳遞:陣列名與變數名的本質區別

     編輯:關於C語言

C語言函數參數傳遞機制深度解析

在 C 語言中,函數調用採用「值傳遞」方式。理解變數名與陣列名作為實參時的行為差異,是掌握指標與記憶體模型的關鍵。

變數名作參數:傳遞的是值

當以變數名作為實參呼叫函數時,系統會將變數的值複製一份傳給形參。形參與實參佔據不同的記憶體單元,函數內部修改形參不會影響實參的值。

陣列名作參數:傳遞的是首元素地址

陣列名在大多數表達式中代表陣列首元素的地址(即指標常量)。因此,以陣列名作實參時,傳遞的實際上是地址值。此時形參必須定義為指標變量(如 int *arr 或 int arr[]),才能接收該地址並訪問原陣列數據。

陣列名與指標關係示意圖

為何允許形參寫成陣列形式?

雖然實參陣列名對應的形參本質是指標,但 C 語言允許形參以 int arr[] 或 int arr[10] 形式聲明。這是因為:

  • 下標法 a[i] 與指標法 *(a+i) 在 C 中無條件等價
  • 陣列語法更直觀,符合程式設計師的思維習慣
  • 從應用角度看,可視為形參陣列共享實參陣列的記憶體空間,函數內修改形參陣列元素會直接影響實參陣列

關鍵區別:實參陣列名 vs 形參陣列名

實參陣列名是固定地址(指標常量),不可修改指向;形參陣列名在函數內部被編譯器當作指標變量處理,可進行指標運算(如 arr++),且 sizeof(arr) 返回指標大小而非陣列總大小。

實務建議

雖然兩種寫法效果相同,但建議在函數簽名中使用指標語法(int *arr)配合長度參數,更能清晰表達「傳遞地址、操作原始記憶體」的語義,避免誤以為整個陣列被複製傳遞。

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