C\C++中函數參數的三種傳遞方式

原文鏈接:https://www.cnblogs.com/tanjuntao/p/8678927.html

轉自:https://www.cnblogs.com/tanjuntao/p/8678927.html

還是看原文的格式更舒服些

一、值傳遞

這種傳遞方式中,實參和形參是兩個不同的地址空間參數傳遞的實質是將原函數中變量的值,複製到被調用函數形參所在的存儲空間中,這個形參的地址空間在函數執行完畢後,會被回收掉。整個被調用函數對形參的操作,隻影響形參對應的地址空間,不影響原來函數中的變量的值,因爲這兩個不是同一個存儲空間。

二、引用傳遞

這種傳遞方式中,形參是引用類型變量,其實是實參的一個別名,在被調用函數中,對引用變量的所有操作等價於對實參的操作。整個被調用函數對形參的操作執行完畢後,原先的實參的值也會發生改變

三、指針傳遞

這種傳遞方式中,實參是變量的地址{swap(&a,&b);},形參是指針類型的變量。在函數中對指針變量的操作,就是對實參(變量地址)所對應的變量的操作。整個被調用函數對形參的操作執行完畢後,原函數中的變量的值將會發生改變

代碼如下:

  1. #include<iostream>

  2. using namespace std;

  3.  
  4. //值傳遞 交換前a=1,b=2;交換後a=1,b=2;

  5. void swap(int a,int b){

  6. int temp=a;

  7. a=b;

  8. b=temp;

  9. }

  10.  
  11. //引用傳遞 交換前a=1,b=2;交換後a=2,b=1;

  12. void swap(int &a,int &b){

  13. int temp=a;

  14. a=b;

  15. b=temp;

  16. }

  17.  
  18. //指針傳遞 交換前a=1,b=2;交換後a=2,b=1;

  19. void swap1(int *a,int *b){

  20. int temp=*a;

  21. *a=*b;

  22. *b=temp;

  23. }

  24.  
  25. //主函數

  26. int main(){

  27. int a=1;

  28. int b=2;

  29. cout<<"交換前"<<endl;

  30. cout<<"a="<<a<<endl;

  31. cout<<"b="<<b<<endl;

  32. swap(a,b);//值傳遞和引用傳遞

  33. swap1(&a,&b);//指針傳遞

  34. cout<<"交換後"<<endl;

  35. cout<<"a="<<a<<endl;

  36. cout<<"b="<<b<<endl;

  37. return 0;

  38. }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章