1. 程式人生 > >C++函式傳遞引數的方式有哪幾種?

C++函式傳遞引數的方式有哪幾種?

    當進行函式呼叫時,要填入與函式形式引數個數相同的實際引數。

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進行限制等,而這裡的成員變數在這種意義上就可以稱為"全域性"變數。當然,可以使用類外一個的真正的全域性變數來實現引數傳遞,但是有時並沒有必要,從工程上講,作用域越小越好。

全域性變數的優點是效率高,但它對多執行緒的支援不好,如果兩個程序同時呼叫同一個函式,而通過全域性變數進行傳遞引數,該函式就不能總是得到想要的結果。