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