C++參數傳遞

來源:互聯網
上載者:User

標籤:++   stream   複合   佔用   函數調用   class   name   變數   表示   

 

*是取值運算子,對地址使用可以獲得地址中儲存的數值;對於指標a,*a表示取a中的值&是地址運算子,對變數使用可以獲得該變數的地址。    對於變數b,*b表示取b的地址

    別名(引用):主要用於做函數的形式參數。
    引用是複合類型,通過在變數前添加&符號來定義。不能定義參考型別的引用!!除了作為形參,定義引用時必須初始化!!如:

int ival= 1024;int&ref = ival;int&ref1;            error   未關聯int&ref2 = 10;        error,必須關聯到一個對象ps:不能將引用再綁定到另一個對象!! const引用是指向const對象的引用,可以讀取但不能修改const引用。constint ival = 1024;int i =10;constint &ref = ival;constint &r = 42;          right!不同於普通引用!constint &r2 = r+i;         right!不同於普通引用!int&ref2 = ival;           error!普通引用!非const引用只能綁定到與該引用同類型的對象。doubledval = 3.14;int&ri = dval;上述代碼會被編譯器解釋為:doubledval = 3.14;int temp= dval;int&ri = temp;所以改變ri不會修改dval,而是修改了temp。所以建議給ri加上const,即const int &ri=dval;

 

 

 

參數傳遞分為:值傳遞,指標傳遞,引用傳遞

#include "stdafx.h"#include <iostream>
using namespace std;//值傳遞void swap1(int p,int q) //傳過來的參數複製一份副本,所以造作對傳過來的參數沒有影響{ int temp; temp=p; p=q; q=temp;} //很明顯,交換失敗//指標傳遞,函數體內只有指標值的變化void swap2(int *p,int *q) //把指標存的是地址,所以調用時要傳對象的地址{ int temp; temp=*p; //把p(*指標是取指標指向地址的值)的值賦給temp *p =*q; //把q的值賦給p *q=temp; //再把temp的值賦給*q} //交換成功,實際是對指標指向地址的值的操作,p和q的指標並沒有改變//指標傳遞,函數體內只有指標的變化void swap3(int *p,int *q){ int *temp; //指標 temp=p; //把p的指標(指向的地址),賦給temp p=q; //把q的指標複製給p q=temp; //再把temp指標賦值給q} //交換失敗,雖然p=2,q=1.但是只是把p和q的指標值改變了,即p指向b,q指向a了,實際上a和b的值並沒有改變//引用傳遞,這時函數並沒有對形參對象初始化,即沒有指定形參對象是哪個對象的別名。
//在函數調用時,實參對象名傳給形參對象名,形參對象名就成為實參對象名的別名。
//實參對象和形參對象代表同一個對象,所以改變形參對象的值就是改變實參對象的值。  
//實際上,在虛實結合時是把實參對象的地址傳給形參對象,使形參對象的地址取實參對象的地址,從而使形參對象和實參對象共用同一個單元。這就是地址傳遞方式。  
//通過使用引用參數,一個函數可以修改另外一個函數內的變數。因為引用對象不是一個獨立的對象,不單獨佔用記憶體單元,而對象指標要另外開闢記憶體單元(其內容是地址),所以傳引用比傳指標更好。  
//注意:雖然系統向形參傳遞的是實參的地址而不是實參的值,但實參必須使用對象名。
void swap4(int &p,int &q) //引用傳遞時,對形參的操作等同於對實參的操作,即傳遞的不會是實參的副本,而就是實參{ int temp; temp=p; p=q; q=temp;}int main(){ int a=1,b=2; swap1(a,b); //swap2(&a,&b); //swap3(&a,&b); //swap4(a,b); return 0;}

 

C++參數傳遞

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.