c++++ 中指針參數的傳參方式有三種:傳值、傳引用和傳地址。傳值復制指針,不影響原始指針;傳引用允許函數修改原始指針;傳地址允許函數修改指針指向的值。根據需要選擇合適的傳參方式。
C++ 函數參數詳解:不同指針類型的傳參方式對比
函數參數傳遞是 C++ 中一種至關重要的編程概念,它允許在函數調用時傳遞值或地址。對于指針類型,C++ 提供了幾種不同的傳參方式,本文將通過實戰案例詳細比較這些方式。
1. 指針傳值
傳遞指針值的語法為 void foo(int* ptr);,它有效地將指針的副本傳遞給函數。對函數內的副本進行修改不會影響原始指針。
#include <iostream>
void foo(int* ptr) {
std::cout << *ptr << std::endl; // 輸出:5
*ptr = 10; // 僅修改函數內的副本
}
int main() {
int num = 5;
foo(&num); // 傳遞指針值
std::cout << num << std::endl; // 輸出:5,原始指針未修改
return 0;
}
登錄后復制
2. 指針傳引用
傳遞指針引用的語法為 void foo(int*& ptr);,它將指針的引用傳遞給函數。對函數內引用的修改將影響原始指針。
#include <iostream>
void foo(int*& ptr) {
std::cout << *ptr << std::endl; // 輸出:5
*ptr = 10; // 修改原始指針
}
int main() {
int num = 5;
foo(&num); // 傳遞指針引用
std::cout << num << std::endl; // 輸出:10,原始指針已修改
return 0;
}
登錄后復制
3. 指針傳地址
傳遞指針地址的語法為 void foo(int** ptr);,它將指針的地址傳遞給函數。函數內只能訪問指針,無法直接訪問其指向的值。
#include <iostream>
void foo(int** ptr) {
std::cout << *(*ptr) << std::endl; // 輸出:5
*(*ptr) = 10; // 修改指針指向的值
*ptr = nullptr; // 指向另一個值
}
int main() {
int num = 5;
foo(&num); // 傳遞指針地址
std::cout << num << std::endl; // 輸出:10,指針指向的值已修改
std::cout << *foo(&num) << std::endl; // 輸出:0,指針指向另一個值
return 0;
}
登錄后復制
總結
指針傳值復制指針,不影響原始指針。指針傳引用使函數能夠修改原始指針,而指針傳地址則允許函數修改指針指向的值。根據具體需要選擇合適的傳參方式至關重要。






