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

C 語言函數參數深度解析:形式參數 vs 實際參數

     編輯:C++ 入門

值傳遞機制

C 語言函數參數採用值傳遞。實參的值被複製給形參,函數內修改形參不影響實參。

經典交換失敗示例

void swap(int a, int b) { int t=a; a=b; b=t; }
int main() { int x=3, y=5; swap(x,y); // x,y 不變 }

指針傳遞實現交換

傳遞變量地址,函數內通過解引用修改原內存:

void swap(int* a, int* b) { int t=*a; *a=*b; *b=t; }
int main() { int x=3, y=5; swap(&x, &y); // x=5, y=3 }

數組作為參數的特殊性

  • 數組名作為實參時退化為首元素地址(指針)。
  • 形參聲明為 int arr[] 或 int* arr 等價。
  • 函數內修改數組元素會影響原數組,因為地址相同。
  • 無法在函數內用 sizeof 獲取數組長度:sizeof(arr) 返回指針大小(通常 4/8 字節)。

正確設計:顯式傳遞長度

void printArr(int arr[], int len) {
    for (int i=0; i

多維數組參數

二維數組傳遞時需指定除第一維外的所有維度大小,或使用指針數組:

void func(int a[][10], int rows); // 編譯時需知列數
void func2(int** a, int rows, int cols); // 動態分配的指針數組

總結表

實參類型形參接收函數內修改影響實參?備註
基本類型變量同類型變量否值拷貝
指針變量同類型指針指針本身否,所指內存是傳地址
一維數組int[] / int*是(元素)退化為指針,長度丟失
結構體變量結構體變量否整體拷貝,大結構體建議傳指針
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved