c++參數傳遞的三種方式


一般來說C++中參數傳遞有三種方式:值傳遞、指針傳遞、引用傳遞

1.值傳遞——傳值

值傳遞是最常見的一種參數傳遞的方式,但是對初學者來說也最容易出錯。如下例:

  1. #include<iostream.h>  
  2. void fun(int a,int b)  
  3. {  
  4.     int temp;  
  5.     temp=a;  
  6.     a=b;  
  7.     b=temp;  
  8. }  
  9. void main()  
  10. {  
  11.     int m,n;  
  12.     m=1;  
  13.     n=2;  
  14.     fun(m,n);  
  15.     cout<<m<<""<<n<<endl;       //輸出結果為 12  
  16. }  

例子中fun()函數采用值傳遞的方式,傳入的實參實際上是m、n的副本而非其本身,所以對副本的改變並不會反映到m、n本身上。

2.指針傳遞——傳指針

使用指針傳遞需要先了解一下指針的有關概念,因為這里主要介紹關於參數的部分,所以廢話不多說了,直接看例子:

  1. #include<iostream.h>  
  2. void fun(int * x)  
  3. {  
  4.     *x+=10;  
  5. }  
  6. void main()  
  7. {  
  8.     int n=0;  
  9.     fun(&n);  
  10.     cout<<n<<endl;      //輸出結果為 10  
  11. }  

fun()函數體內的x是指向外部變量n的指針,改變指針的內容將導致n的值得改變,所以n的值成為了10。

3.引用傳遞——傳引用

引用相當於別名(綽號),比方說有人的名字是王小麗,她的綽號是“小小”。如果有人說“小小”幾歲,實際上就是指王小麗幾歲。

  1. #include <iostream.h>  
  2. void main()  
  3. {  
  4.     int x;  
  5.     int &y=x;   //變量引用  
  6.     y=99;  
  7.     cout<<"x="<<x<<endl;  //輸出結果為 x=99  
  8. }  

程序中&y=x應當理解為y具有x的地址,即x與y具有相同的地址,地址相同了當然內容也相同了,所以y的值是99。
比較:

       對比參數的三種傳遞方式,可以發現“引用傳遞”和“指針傳遞”的性質一樣,而書寫方式像“值傳遞”。引用傳遞可以做的任何事指針也能夠做到,因為指針能夠毫無約束地操作內存中的東西,這種強大的功能背后也必將隱藏着巨大的危險,所以慎用指針。

 

劍指offer上判斷平衡二叉樹用的就是指針傳遞


免責聲明!

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



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