十 函式引數傳遞與內聯函式

2021-07-01 22:02:40 字數 1421 閱讀 9692

一.函式的引數傳遞函式引數有實參和形參兩種。實參可以是常量、變數或表示式,它的型別必須和形參相符。函式沒有被呼叫時,形參並不占用記憶體,只有在呼叫時才會分配記憶體空間,然後將實參傳進去。函式引數的傳遞有兩種方式,值呼叫和引用呼叫。

1.值呼叫

給形參分配空間,然後將實參拷貝給形參。之後實參和形參脫離了關係,互不影響。如下:

#include using namespace std;

void swap(int a,int b);

int main()

int main()

需要注意的是:預設引數值必須按照從右到左的順序定義。即、在有預設值的形參右邊,不能再出現無預設值的形參。也不能有預設值和無預設值穿插。(這主要是因為呼叫時實參初始化從左到右,如果定義不對會出現錯誤情況)如下:

int add(inta,int b=1,int c=2)  //正確

int add(inta=1,int b,int c); //錯誤

int add(inta=1,int b,int c=2); //錯誤

呼叫出現在函式體實現之前時,預設形參值必須在宣告時給出;而當呼叫出現在函式體實現之後時,預設形參值需在函式實現時給出。如下

:呼叫在實現之前、

int add(inta=5,int b=6);  //宣告時給出

int main()

int add(inta,int b) //此時不需要再重複給出

呼叫在實現之後、

int add(inta=5,int b=6)  //實現時給出

int main()

.內聯函式

內聯函式有**復用,便於維護等優點。函式呼叫時有需要儲存現場和返回位址等開銷。對於一些規模小、簡單的函式可以定義為內聯函式,內聯函式呼叫時不需要那些轉移帶來的開銷。

語法形式如下:

inline 

型別識別符號

被調函式名

(含型別說明的形參表

)使用內聯函式要注意的是:

1、內聯函式體內不能用迴圈和

switch

語句;2

、內聯函式的定義必須出現在內聯函式第一次使用之前

; 3、內聯函式不能進行異常介面說明,即不能宣告可能丟擲的異常。

此外,內聯函式是為提高效率也來,不應該是複雜函式,如果那樣會造成**膨脹,反而增大開銷,當然在此情況下編譯器會將其做普通函式處理。下面的圓面積的計算就是乙個能定義為內聯函式的好例子。

inline doublearea(double r)

函式的引數傳遞與內聯函式

一.函式的引數傳遞 函式引數的傳遞有兩種方式,值呼叫和引用呼叫。1.值呼叫 值呼叫就是呼叫函式時,給形參分配記憶體空間,將實參拷貝給形參,之後的函式執行中形參和實參就脫離了關係,誰都不影響誰。也就是值呼叫時,只是用實參的值初始化下形參,之後兩者互不影響。例子 include using namesp...

C 內聯函式 函式過載與函式預設引數

inline int max int a,int b int max double f1,double f2 int max int n1,int n2 int max int n1,int n2,int n3 max 3.4,2.5 呼叫 1 max 2,4 呼叫 2 max 1,2,3 呼叫 3...

函式引數傳遞

引數傳遞的本質 實參給形參賦值的過程 1.1 位置引數之值傳遞 值傳遞指傳遞不可變型別,一般指string tuple和number型別 def func1 a print a a 10 print a temp 20 將temp作為實參傳遞給func1函式,將賦值給形參a 相當於 a temp f...