C++函數參數傳參的本質解析


在默認情況下,變量只能以值傳遞的方式傳遞給函數。這句話的意思是:被傳遞到函數的只是變量的值,永遠不是變量的本身。

例如:

void changeVar(int myVar,int newValue)  

{  

  myVar=newValue;  

}  

int main()

{  

int myNum=20;  

changeVar(myNum,90);  

std::cout<<myNum<<endl;  

return 0;  

結果:20

  在本例中main函數調用函數changeVar(int myVar,int newValue),程序只把main函數中的myNum的值20傳遞給changeVar中的形參myVar,因此他們是不同的兩個變量,就連程序在調用changeVar函數的時候根本就不知道還有myNum這個變量,因此結果輸出myNum還是20。

解決方法:使用地址和指針

上面的示例可以改成

void changeVar(int* myVar,int newValue)

{  

  *myVar=newValue;

}  

int main()

{  

int myNum=20;  

changeVar(&myNum,90);  

std::cout<<myNum<<endl;  

return 0;  

解決方法:引用

上面的示例可以改成

void changeVar(int &myVar,int newValue)  

{  

  myVar=newValue;  

}  

int main()

{  

int myNum=20;  

changeVar(myNum,90);  

std::cout<<myNum<<endl;  

return 0;  

1.在定義函數時,還可以讓它以“引用傳遞”方式而不是以“值傳遞”方式返回: int &myFuntion();

2.除了可以改變有關變量的值,“引用傳遞”方式的另一個好處是它的開銷相對要小一些:因為不需要在函數里創建臨時變量來容納那些值,程序的內存占用量當然會小一些。

3.如果想獲得“引用傳遞”方式帶來的性能改善,但不想改變某個變量的值,可以把相應的輸入參數定義為一個常量:

 void myFunc(const int &myNum);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM