在 C 語言中,函數調用採用「值傳遞」方式。理解變數名與陣列名作為實參時的行為差異,是掌握指標與記憶體模型的關鍵。
當以變數名作為實參呼叫函數時,系統會將變數的值複製一份傳給形參。形參與實參佔據不同的記憶體單元,函數內部修改形參不會影響實參的值。
陣列名在大多數表達式中代表陣列首元素的地址(即指標常量)。因此,以陣列名作實參時,傳遞的實際上是地址值。此時形參必須定義為指標變量(如 int *arr 或 int arr[]),才能接收該地址並訪問原陣列數據。

雖然實參陣列名對應的形參本質是指標,但 C 語言允許形參以 int arr[] 或 int arr[10] 形式聲明。這是因為:
a[i] 與指標法 *(a+i) 在 C 中無條件等價實參陣列名是固定地址(指標常量),不可修改指向;形參陣列名在函數內部被編譯器當作指標變量處理,可進行指標運算(如 arr++),且 sizeof(arr) 返回指標大小而非陣列總大小。
雖然兩種寫法效果相同,但建議在函數簽名中使用指標語法(int *arr)配合長度參數,更能清晰表達「傳遞地址、操作原始記憶體」的語義,避免誤以為整個陣列被複製傳遞。