c++關於函數的按值傳遞和按址傳遞__函數

來源:互聯網
上載者:User

按址傳遞中,引用形參是實參變數的一個引用,前邊也講過,引用只是相當於一個別名,系統不會再為其分配儲存空間,所以此時,函數中改變形參後,實參值也會相應改變。按值傳遞只是將實參的值傳遞給形參變數,參與運算,因為是在不同的儲存單元,所以實參值不會受影響。

 值傳遞(按值傳遞)    1.實參值傳遞給相應形參  2.實參地址傳遞給相應形參 比如:數組、指標。            

  址傳遞(引用傳遞)使用別名,共用儲存空間(直接存取)  形參為引用參數時,才為按址傳遞,此時對應實參一般為一個變數。

比如一個為例子:

int func(int *p,int *q) { } 

void main() 

{

 int a,b func(&a,&b); 

}

 在main函數中,對變數a,b開闢了儲存空間,當執行到func函數時,系統會為p,q開闢指標所需的儲存空間,只不過p和q分別指向a,b。所以,實參是將地址值傳遞給了形參,它還是屬於按值傳遞。 若程式改成這樣的(引用調用):

int func(int &p,int &q) { }

 void main() 

{

 int a,b func(a,b); 

}

 在main函數中,對變數a,b開闢了儲存空間,當執行到func函數時,系統不會為p,q開闢儲存空間,而是採用實參a,b的儲存空間。所以,虛實結合過程中,形參部分沒有再開闢儲存空間。

函數的參數值本身在調用前後的值是保持不變的,在函數體內部所做的任何修改,對函數體外的值沒有任何的影響。即便是傳遞的指標,從本質來說,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.