C 函式的引數傳遞機制以及引數的型別選擇

2022-09-17 12:30:18 字數 2096 閱讀 9571

c++primer之函式的引數傳遞以及引數的型別

一:函式的基本知識

(1)      函式要素:返回型別,函式名字,形參(引數之間用逗號隔開)

(2)      函式呼叫機制:我們通過呼叫運算子來執行函式,其中運算子就是括號

(3)      當我們呼叫函式時,主調函式被暫停執行,被調函式開始執行,當被調函式遇到return語句時,return語句完成兩項工作,1:返回return語句中的值。2:將控制權從被調函式轉移到主調函式。函式的返回值用於初始化呼叫表示式的結果。

(4)      函式的實參和形參必須型別一致,或者實參可以通過隱式轉換到形參型別

下面舉個例子:

#includeusing namespace std;

int function(int a) //函式返回型別,名字,引數

return c; //返回值

}int main ()

//與區域性變數的區別在於: 在函式退出時,

//這個變數始終存在,靜態區域性變數延長了區域性變數的生命週期.

//但不能被其它 函式使用, 當再次進入該函式時, 將儲存上次的結果。

//其它的特點與區域性變數一樣。

int main()

int increase2( int &a) //引用引數傳遞

int increase3( int *p) //指標引數傳遞

三:初始化時忽略形參的const特性

我們使用實參初始化形參時,可以忽略形參的頂層const,通俗一點來說,當形參是const型別,實參是否是const 型別都一樣。反之也成立(當實參是常量型別,形參是否是常量型別都一樣),只是當形參是常量型別,函式中不允許改編實參。

例子如下:

//實參初始化形參時,可以忽略形參是否是const型別

#includeusing namespace std;

int add1(const int &a)

{ cout<

上面的例子告訴我們,盡量使用常量的引用,當在函式中不改變引數時,我們設定為常量。把函式不會改變的形參定義成普通的引用是一種常見的錯誤,這麼做帶給函式的呼叫者一種誤導,既函式可以修改它的實參值,使用引用而非常量引用也會極大地限制所能接受的實參型別,例如,我們不能把const 物件,傳給普通的引用形參。

四:形參是陣列

當形參是陣列時候,若形參是:a[10],a,a,這三種形式都一樣,原理是:陣列會被轉換成指標,我們外函式傳遞陣列,其實就是為陣列傳遞陣列的首元素的指標。

例如一下程式:

#include//顯式的傳入乙個陣列大小的引數

using namespace std;

int print(const char *a,int b) //陣列作為形參的,傳遞的其實是手首元素指標,其中引數1也可以寫成:a,a[10]

{ for(int i=0;i

五:函式的返回型別

(1)      存在返回值,返回值型別與函式返回型別一致,或者可以隱式轉換,返回值通過return 返回到主調函式中。其中,乙個返回引用的的函式可以充當左值,其原理和變數可以充當左值是一樣的。

(2)      沒有返回值,既renturn ;即可,也可以沒有這句話,函式會自動隱式新增這句話。

舉個例子

//返回型別是引用可以當左值

#includeusing namespace std;

int& function(int &a)

{ cout<

第一遍看c++primer,以後還得多看,多想,多練。暫且到這吧

函式引數傳遞機制

函式引數傳遞機制問題在本質上是呼叫函式 過程 和被呼叫函式 過程 在呼叫發生時進行通訊的方法問題。基本的引數傳遞機制有兩種 值傳遞和引用傳遞。以下討論稱呼叫其他函式的函式為主調函式,被呼叫的函式為被調函式。值傳遞 passl by value 過程中,被調函式的形式引數作為被調函式的區域性變數處理,...

C 方法的引數傳遞機制

值引數 value parameter 方法名稱 引數型別 引數名稱 引數型別 引數名稱 引用引數 reference parameter 方法名稱 ref 引數型別 引數名稱 ref 引數型別 引數名稱 輸出引數 output parameter 方法名稱 out引數型別 引數名稱 out 引數型...

C C 函式引數傳遞機制

c c 的基本引數傳遞機制有兩種 值傳遞和引用傳遞,我們分別來看一下這兩種的區別。1 值傳遞過程中,需在堆疊中開闢記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形參的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。2 引用傳遞過程中,被...