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