亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C/C++函數參數傳遞機制詳解及實例

發布時間:2020-10-23 18:15:33 來源:腳本之家 閱讀:153 作者:lqh 欄目:編程語言

C/C++函數參數傳遞機制詳解及實例

概要:

C/C++的基本參數傳遞機制有兩種:值傳遞和引用傳遞,我們分別來看一下這兩種的區別。

(1)值傳遞過程中,需在堆棧中開辟內存空間以存放由主調函數放進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形參的任何操作都是作為局部變量進行,不會影響主調函數的實參變量的值。

(2)引用傳遞過程中,被調函數的形參雖然也作為局部變量在堆棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調函數中的實參變量。正因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。

下面我們來看一個示例。

/*
*測試函數參數傳遞機制
*/
class CRect {

public:
  int height;
  int widht;

  CRect() {
    height = 0;
    widht = 0;
  }

  CRect(int height, int widht) {
    this->height = height;
    this->widht = widht;
  }

};

//(1)傳址調用(傳指針)
int RectAreaPoint(CRect *rect) {
  int result = rect->height * rect->widht;
  rect->height = 20;
  return result;
}

//(2)引用傳遞
int RectAreaRefer(CRect &rect) {
  int result = rect.height * rect.widht;
  rect.height = 30;
  return result;

}

//(3)傳值調用
int RectArea(CRect rect) {
  int result = rect.height * rect.widht;
  rect.height = 40;
  return result;
}

看一下我們的測試代碼和測試結果。

//測試代碼邏輯
void testPoint() {
  CRect rect(10, 10);
  cout << "面積:" << RectAreaPoint(&rect) << endl;
  cout << "面積:" << RectAreaRefer(rect) << endl;
  cout << "rect.height:" << rect.height << endl;
  cout << "面積:" << RectArea(rect) << endl;
  cout << "rect.height:" << rect.height << endl;
}

//測試結果
面積:100
面積:200
rect.height:30
面積:300
rect.height:30

可以發現傳址調用和引用傳遞兩種方式,當改變形參的值時,同時也會將實參的值改變,而傳值調用改變形參則對實參沒有任何影響。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

浦东新区| 平山县| 郁南县| 高唐县| 太仆寺旗| 富平县| 获嘉县| 依兰县| 永平县| 平和县| 五峰| 始兴县| 岐山县| 上饶县| 策勒县| 静乐县| 宜昌市| 东兰县| 略阳县| 乐至县| 渭南市| 和硕县| 丹凤县| 阿克| 泽库县| 台东市| 昭通市| 且末县| 普兰县| 那曲县| 佛山市| 南昌县| 澄城县| 红桥区| 宁都县| 和林格尔县| 南城县| 苗栗市| 荆门市| 习水县| 阜新|