C/C++:函數參數傳遞方式

來源:互聯網
上載者:User

傳遞變數名,傳遞指標,傳遞引用

1.將變數名作為形參和實參

在這種情況下傳給形參的是變數的值。傳遞是單向的,即如果在執行函數期間形參的值發生變化,並不傳回給實參,這就是值傳遞方式。因為在調用函數期間,形參和實參不是同一個儲存單元。

int main(){void swap(int,int);//參數為整型變數int i=3,j=4;cout<<"i="<<i<<",j="<<j<<endl;swap(i,j);//變數名cout<<"i="<<i<<",j="<<j<<endl;system("PAUSE");return 0;}void swap(int a,int b){//形參為整型變數int temp;temp=a;a=b;b=temp;}

結果:

i=3,j=4

i=3,j=4

可以發現,執行函數swap後,形參a和b的改變不會影響實參i和j的值。

2.傳遞變數指標

形參是指標變數,實參是一個變數的地址,調用函數時,形參(指標變數)指向實參變數單元。

int main(){void swap(int*,int*);//參數為整型指標變數int i=3,j=4;cout<<"i="<<i<<",j="<<j<<endl;swap(&i,&j);//變數地址cout<<"i="<<i<<",j="<<j<<endl;system("PAUSE");return 0;}void swap(int *p1,int *p2){//形參為整型指標變數int temp;temp=*p1;*p1=*p2;*p2=temp;}

結果:

i=3,j=4

i=4,j=3

調用函數時把變數i和j的地址傳送給形參p1和p2,因此*p1和i為同一記憶體單元,*p2和j是同一記憶體單元。

這種方式還是“值傳遞”,只不過實參的值是變數的地址而已。而在函數中改變的不是實參的值(即地址,這種改變也影響不到實參),而是實參地址所指向的變數的值。

3.引用形參
int main(){void swap(int&,int&);//參數為整型變數的引用int i=3,j=4;cout<<"i="<<i<<",j="<<j<<endl;swap(i,j);//變數名cout<<"i="<<i<<",j="<<j<<endl;system("PAUSE");return 0;}void swap(int &a,int &b){//形參為參考型別int temp;temp=a;a=b;b=temp;}

結果:

i=3,j=4

i=4,j=3

當main函數調用swap函數時,由實參把變數名傳給形參。i的名字傳給引用變數a,j的名字傳給引用變數b。此時a和b就分別與i,j佔用同一記憶體空間。這種把實參地址傳遞到形參,使形參的地址取實參的地址,從而使形參與實參共用同一單元的方式,就是地址傳遞方式。

這裡要說明的是,

[1]方式2傳遞指標變數要另外開闢記憶體單元,其內容為地址;而方式3引用不是一個獨立的變數,不單獨佔記憶體單元。

[2]方式3中,main函數調用swap函數時,實參不必用函數的地址(即&i,&j),而直接使用變數名。系統向形參傳遞的是實參的地址而不是實參的值。

本文出自 “子 孑” 部落格,請務必保留此出處http://zhangjunhd.blog.51cto.com/113473/53632

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.