首頁 > 軟體

超詳細講解C++的三種函數傳遞方式

2022-05-18 10:01:13

一、值傳遞

程式碼如下:

void swap1(int x,int y)
{
	int temp = x;
    x = y; 
    y = temp;
}//main函數裡寫入 swap1(a,b);即可 其中x,y形參  a,b實參

這裡我用swap1()交換函數做舉例,函數內容部分是非常經典的三步交換值的程式碼,這樣就完成了一個非常簡單的值傳遞函數。

二、地址傳遞

1.指標的有關知識

我們經常聽到這樣一句話“指標指向地址”,沒錯,指標用來存放變數的地址,這樣可以有效的節省記憶體空間。例如

int a=6; int *p=&a; cout<<"a的值為:"<<a<<endl; 和cout<<"*p的值為:"<<*p<<endl;

上面兩個輸出結果都是一樣的,其中p=&a,意為p現在是變數a的地址,而*p就相當於*&a,這樣*和&抵消,實際上*p就表示變數a的值

2.地址傳遞舉例

程式碼如下:

void swap2(int *x,int *y)
{
	int temp = *x; 
    *x = *y;
    *y = temp;
}//main函數裡寫 swap2(&a,&b) *x和*y為形參,a和b為實參

這裡不同於值傳遞的是,傳入實參的時候加上了&符號。因為函數傳參規定對應的資料型別需要一致,所以不難理解*x=&a,*y=&b

三、參照傳遞

1.參照的相關知識

範例:int a=10; int &b=a; cout<<"a="<<a<<endl;cout<<"b="<<b<<endl;

上面兩個輸出結果都是10 其實參照就是給變數起個別名,就比如你小名張三,長大了叫張大仙,當你張三18歲了,那麼張大仙也18歲,無論改變a還是b,他們兩個的結果都一樣

2.參照傳遞舉例

程式碼如下:

void swap3(int &x,int &y)
{
	int temp = x;
    x = y; 
    y = temp;
}//main 裡寫 swap3(a,b)  &x,&y為形參 a,b為實參

這裡跟我上面提到的一致,就是 &x=a a的別名為x; 那麼x和y的改變就會影響a和b的值,從而完成交換資料的任務

四、三種傳參方式的比較

值傳遞形參不能修飾實參:第一種值傳遞後主函數a,b的值並沒有發生改變,因為如果傳的只是變數的值,那麼編譯器會拷貝一個副本,只是把a,b的值賦給了x和y,很顯然這種方式的a和x的地址不相同,就比如現在有一個香蕉,我利用克隆技術複製了一個一模一樣的出來,我把克隆的吃了,那原來的肯定還在,並不影響原來的香蕉。

地址傳遞的形參可以修飾實參,利用指標和參照方法,傳遞的都是變數的地址,所以形參的改變會引起實參的變化。

總結

以上就是我分享給大家的三種函數值傳遞方式,我個人推薦多使用參照傳遞,相比於值傳遞他不會產生副本,節省空間,相比於指標他的形式更簡單,效果卻一樣,如果有錯誤或者有更好的見解一定私信我,共同進步哦

到此這篇關於超詳細講解C++的三種函數傳遞方式的文章就介紹到這了,更多相關C++函數傳遞內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com