国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中函數調用時的三種參數傳遞方式

2019-11-10 20:58:17
字體:
來源:轉載
供稿:網友

在C++中,參數傳遞的方式是“實虛結合”。

按值傳遞(pass by value)地址傳遞(pass by pointer)引用傳遞(pass by reference)

按值傳遞的過程為:首先計算出實參表達式的值,接著給對應的形參變量分配一個存儲空間,該空間的大小等于該形參類型的,然后把以求出的實參表達式的值一一存入到形參變量分配的存儲空間中,成為形參變量的初值,供被調用函數執行時使用。這種傳遞是把實參表達式的值傳送給對應的形參變量,故稱這種傳遞方式為“按值傳遞”。

 

使用這種方式,調用函數本省不對實參進行操作,也就是說,即使形參的值在函數中發生了變化,實參的值也完全不會受到影響,仍為調用前的值。

#include <iostream>  using namespace std;  void swap(int,int);  int main()  {      int a = 3, b = 4;      cout << "a = " << a << ", b = "      << b << endl;      swap(a,b);      cout << "a = " << a << ", b = "      << b << endl;      return 0;  }  void swap(int x, int y)  {       int t = x;       x = y;       y = t;  } 

如果在函數定義時將形參說明成指針,對這樣的函數進行調用時就需要指定地址值形式的實參。這時的參數傳遞方式就是地址傳遞方式。

 

地址傳遞與按值傳遞的不同在于,它把實參的存儲地址傳送給對應的形參,從而使得形參指針和實參指針指向同一個地址。因此,被調用函數中對形參指針所指向的地址中內容的任何改變都會影響到實參。

#include <iostream>  using namespace std;  void swap(int*,int*);  int main()  {      int a = 3, b = 4;      cout << "a = " << a << ", b = "      << b << endl;      swap(&a,&b);      cout << "a = " << a << ", b = "      << b << endl;      system("pause");      return 0;  }  void swap(int *x,int *y)  {       int t = *x;       *x = *y;       *y = t;  }

按值傳遞方式容易理解,但形參值的改變不能對實參產生影響。

地址傳遞方式雖然可以使得形參的改變對相應的實參有效,但如果在函數中反復利用指針進行間接訪問,會使程序容易產生錯誤且難以閱讀。

 

如果以引用為參數,則既可以使得對形參的任何操作都能改變相應的數據,又使得函數調用顯得方便、自然。引用傳遞方式是在函數定義時在形參前面加上引用運算符“&”。

#include <iostream>  using namespace std;  void swap(int&,int&);  int main()  {      int a = 3, b = 4;      cout << "a = " << a << ", b = "      << b << endl;      swap(a,b);      cout << "a = " << a << ", b = "      << b << endl;      system("pause");      return 0;  }  void swap(int &x,int &y)  {       int t = x;       x = y;       y = t;  }


上一篇:c++ iterate

下一篇:c++運算符的優先級表

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 鱼台县| 鹿邑县| 怀远县| 楚雄市| 南昌市| 贵南县| 西昌市| 仲巴县| 许昌县| 邯郸市| 宝兴县| 望奎县| 田林县| 外汇| 普陀区| 承德县| 喀喇沁旗| 团风县| 临武县| 永春县| 松江区| 崇左市| 四子王旗| 卓资县| 新蔡县| 焉耆| 江山市| 高邑县| 建瓯市| 璧山县| 台南县| 梁山县| 舞阳县| 江口县| 射洪县| 通化县| 姚安县| 阿勒泰市| 峨山| 梨树县| 长武县|