函數參數傳遞三種方式(傳值方式,地址傳遞,引用傳遞)


  • 形參與實參
    • 形參即形式上的參數,對實參的一種抽象類型描述只是聲明一個函數能夠接受什么類型的實參,而不確定接受的實參的具體內容是什么
    • 實參即傳遞給函數對應形參的具體內容

 

  • 參數傳遞兩種方式--傳值&傳址
    • 傳值方式:將實參的值拷貝給函數或方法,在函數內對形參進行操作,操作的對象是實參的拷貝,對實參本身沒有影響,在函數結束返回后,形參被丟棄釋放,實參的內容不會被改變
    • 傳址方式:將實參的地址傳遞給函數,在函數內對形參進行操作等同於對實參進行相同的操作,在函數調用結束返回后,形參被釋放,實參的內容是對形參進行操作后的結果。
      傳址又分為:引用傳遞&指針傳遞



 


  1. 值傳遞

      

1 void exchange1(int x,int y)
2 {
3  int temp;
4 temp=x;
5 x=y;
6 y=temp;
7 }

exchange1(a,b);在調用過程中,函數隱含的把實參a,b的值分別傳給了x,y 函數中的操作只是對,xy的操作,沒有對a,b 進行任何操作,因此啊,ab的值是不變的。


 

  2.地址傳遞(指針)

  

1 void exchange2(int *px,int *py)
2 {
3 int temp=*px;
4 *px=*py;
5 *py=temp;
6 
7 }
8 int a=4,b=5;
9 exchange2(&a,&b);

  將ab的地址傳遞給函數,對*px,*py的操作即是對a,b變量本身的操作。可以實現a,b的值交換


 

  3.引用傳遞

 

  

 1 void exchange3(int &x,int &y)
 2 {
 3 int temp=x;
 4 x=y;
 5 y=temp;
 6 
 7 }
 8 
 9 int a=3,b=4;
10 exchange3(a,b);

  僅形式參數的格式與值傳遞不同,內部定義域調用與值傳遞完全相同,可以實現ab值得對調

  因為在x,y 前有一個取地址符號&,在調用exchang3(a,b)時會用替換x,y,稱xy引用了變量ab,在函數內部便是對實參ab進行操作了,函數 內部可以直接修改a,b的值。




 

  •  引用即對象的別名,傳對象的引用,用於把一個對象的地址作為參數傳遞過去,而不是對象本身。引用傳遞,避免了一次實參到形參的拷貝,提高了效率。

 

    

  •  引用,指針,傳址使用原則

 

  1. 如果數據對象較小,如內置數據類型或小型結構,則按值傳遞
  2. 如果數據對象是數組,則使用指針,並將指針聲明為指向const的指針
  3. 如果數據對象是較大的結構,則使用const指針或const引用,以提高運行效率,以減少復制結構所需要的時間和空間
  4. 如果數據對象是類對象,則使用const引用,傳遞類對象參數的標准方式是按引用傳遞。

    如果出現類似的manmin(&x),其中x為int類型的值,那么函數將修改變量x的值。

 


免責聲明!

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



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