C++ 函數(shù)參數(shù)詳解:不同指針類型的傳參方式對(duì)比
c++++ 中指針參數(shù)的傳參方式有三種:傳值、傳引用和傳地址。傳值復(fù)制指針,不影響原始指針;傳引用允許函數(shù)修改原始指針;傳地址允許函數(shù)修改指針指向的值。根據(jù)需要選擇合適的傳參方式。
C++ 函數(shù)參數(shù)詳解:不同指針類型的傳參方式對(duì)比
函數(shù)參數(shù)傳遞是 C++ 中一種至關(guān)重要的編程概念,它允許在函數(shù)調(diào)用時(shí)傳遞值或地址。對(duì)于指針類型,C++ 提供了幾種不同的傳參方式,本文將通過(guò)實(shí)戰(zhàn)案例詳細(xì)比較這些方式。
1. 指針傳值
傳遞指針值的語(yǔ)法為 ,它有效地將指針的副本傳遞給函數(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;
}
2. 指針傳引用
傳遞指針引用的語(yǔ)法為 ,它將指針的引用傳遞給函數(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;
}
3. 指針傳地址
傳遞指針地址的語(yǔ)法為 ,它將指針的地址傳遞給函數(shù)。函數(shù)內(nèi)只能訪問(wèn)指針,無(wú)法直接訪問(wèn)其指向的值。
#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ù)制指針,不影響原始指針。指針傳引用使函數(shù)能夠修改原始指針,而指針傳地址則允許函數(shù)修改指針指向的值。根據(jù)具體需要選擇合適的傳參方式至關(guān)重要。
相關(guān)推薦
-
golang函數(shù)性能優(yōu)化與重構(gòu)
go 函數(shù)性能優(yōu)化建議:1. 優(yōu)化內(nèi)存分配(使用切片、緩沖通道、重用結(jié)構(gòu)體指針);2. 使用 goroutine 并行(充分利用多核 cpu);3. 選擇合適的數(shù)據(jù)結(jié)構(gòu)(映射、切片、堆棧);4. 內(nèi)聯(lián)
-
golang自定義函數(shù)實(shí)現(xiàn)的性能基準(zhǔn)測(cè)試
在 go 中創(chuàng)建自定義函數(shù)基準(zhǔn)測(cè)試性能基準(zhǔn)測(cè)試:使用 testing 包提供的 b 類型創(chuàng)建自定義函數(shù)。在函數(shù)中使用 b 類型的 record 方法度量執(zhí)行時(shí)間。使用 go test -bench .
-
golang函數(shù)最佳實(shí)踐詳解
遵循 go 函數(shù)最佳實(shí)踐可以編寫高效、可維護(hù)的函數(shù),具體包括:1. 保持函數(shù)簡(jiǎn)潔;2. 使用命名參數(shù);3. 返回多個(gè)值;4. 處理錯(cuò)誤;5. 使用文檔注釋。Go 函數(shù)最佳實(shí)踐詳解在 Go 中編寫高效、
-
單元測(cè)試與集成測(cè)試在golang函數(shù)測(cè)試中的區(qū)別?
單元測(cè)試和集成測(cè)試是兩種不同的 go 函數(shù)測(cè)試類型,分別用于驗(yàn)證單個(gè)函數(shù)或多個(gè)函數(shù)的交互和集成。單元測(cè)試只測(cè)試特定函數(shù)的基本功能,集成測(cè)試測(cè)試多個(gè)函數(shù)之間的交互和與應(yīng)用程序其他部分的集成。單元測(cè)試與集
-
如何在 C++ 函數(shù)中實(shí)現(xiàn)線程安全的數(shù)據(jù)結(jié)構(gòu)?
如何在 c++++ 函數(shù)中實(shí)現(xiàn)線程安全的數(shù)據(jù)結(jié)構(gòu)?使用互斥鎖保護(hù)臨界區(qū)(共享數(shù)據(jù))。線程安全的動(dòng)態(tài)數(shù)組示例:使用互斥鎖保護(hù) std::vector 中的數(shù)據(jù)。實(shí)戰(zhàn)案例:線程安全的隊(duì)列,使用互斥鎖和條件















