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; }
總結
指標傳值複製指針,不影響原始指標。指針傳引用使函數能夠修改原始指針,而指針傳送位址則允許函數修改指針指向的值。根據具體需求選擇合適的傳參方式至關重要。
以上是C++ 函式參數詳解:不同指標型別的傳參方式對比的詳細內容。更多資訊請關注PHP中文網其他相關文章!