在 c++++ 函數中,引用參數傳遞變量地址,對參數的修改影響原始變量,而指針參數傳遞指向地址的指針,對參數的修改不影響原始變量。
C++ 函數中引用參數和指針參數的區別
在 C++ 中,函數可以接受引用參數或指針參數。雖然兩者都用于傳遞一個變量的地址,但它們之間存在一些關鍵區別。
引用參數
引用參數通過符號 &
傳遞變量的地址。它本質上是傳遞變量本身,這意味著對該引用參數所做的任何更改都會反映在原始變量中。
代碼示例:
void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int main() { int x = 5; int y = 10; swap(x, y); // 交換 x 和 y 的值 cout << x << " " << y << endl; // 輸出:10 5 }
登錄后復制
指針參數
指針參數通過符號 *
傳遞變量的地址。它本質上是傳遞一個指向該變量內存地址的指針,這意味著對該指針參數所做的任何更改并不會反映在原始變量中。
代碼示例:
void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int x = 5; int y = 10; swap(&x, &y); // 交換 x 和 y 的值 cout << x << " " << y << endl; // 輸出:5 10 }
登錄后復制
區別總結
特性 | 引用參數 | 指針參數 |
---|---|---|
傳遞方式 | 引用變量地址 | 傳遞指針地址 |
對參數的修改 | 更改原始變量 | 不會更改原始變量 |
內存占用 | 指針大小 | 引用大小 |
用途 | 傳遞實際參數 | 傳遞大對象或復雜結構 |
實戰案例
考慮一個需要交換兩個元素的函數。
使用引用參數:
void swap(int& a, int& b) { int temp = a; a = b; b = temp; }
登錄后復制
使用指針參數:
void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
登錄后復制
哪種方法更好取決于所涉及的具體情況。如果需要交換兩個簡單的值,則引用參數更合適。但是,如果需要交換大對象或復雜結構,則指針參數更合適,因為它可以避免在函數內外復制大塊數據。