C++函式傳遞引數的方式有哪幾種?
阿新 • • 發佈:2019-02-12
當進行函式呼叫時,要填入與函式形式引數個數相同的實際引數。
C++函式傳遞引數的方式有以下四種:
(1) 值傳遞
當進行值傳遞時,就是將實參的值複製到形參中,而形參和實參不是同一個儲存單元,所以函式呼叫結束後,實參的值不會發生改變,程式示例如下:
#include<iostream>
using namespace std;
void swap(int a,int b){
int temp;
temp =a;
a=b;
b = temp;
}
當傳進去a,b的時候,在引數外面列印引數值會發現呼叫swap方法之後引數的值沒有發生變化;
(2)指標傳遞
當進行指標傳遞時,形參是指標變數,實參是一個變數的地址,呼叫函式時,形參(指標變數)指向實參變數單元,這種方式還是"值傳遞",只不過實參的值是變數的地址而已,而在函式中改變的不是實參的值,而是實參變數地址所指向的變數的值;
(3)傳引用
實參地址傳遞到形參,使形參的地址取實參的地址,從而使形參與實參共享同一單元的方式;
(4)全域性變數傳遞
這裡的“全域性”變數並不見得就是真正的全域性的,所有的程式碼都可以直接訪問的,只要這個變數的作用域足夠這兩個函式訪問就可以了,比如一個類中的兩個成員函式可以使用一個成員變數實現引數傳遞,或者使用static關鍵字定義,或者使用namespace進行限制等,而這裡的成員變數在這種意義上就可以稱為"全域性"變數。當然,可以使用類外一個的真正的全域性變數來實現引數傳遞,但是有時並沒有必要,從工程上講,作用域越小越好。
全域性變數的優點是效率高,但它對多執行緒的支援不好,如果兩個程序同時呼叫同一個函式,而通過全域性變數進行傳遞引數,該函式就不能總是得到想要的結果。