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

2021-06-28 05:02:52 字數 1862 閱讀 4771

一.函式的引數傳遞

函式引數的傳遞有兩種方式,值呼叫和引用呼叫。

1.值呼叫

值呼叫就是呼叫函式時,給形參分配記憶體空間,將實參拷貝給形參,之後的函式執行中形參和實參就脫離了關係,誰都不影響誰。也就是值呼叫時,只是用實參的值初始化下形參,之後兩者互不影響。

例子:#include

using namespace std;

void swap(int a, int b);

int main()

。這個時候引用就不需要對其初始化了,因為形參只是型別說明,主調函式呼叫這個函式時才會為形參分配記憶體,也才會用實參來初始化形參。用引用呼叫後,形參就是實參的別名而已,對形參做的任何改變都會影響實參發生同樣的改變。引用呼叫說明如下:

#include

using namespace std;

void swap(int& a, int& b);

int main()

int main()

預設引數值必須按照從右向左的順序定義。在有預設值的形參右面,不能出現無預設值的形參。也就是說應該把有預設值的形參都一塊放到右邊,不能讓有預設值的跟沒預設值的形參穿插著放。因為在呼叫時,實參初始化形參是按從左向右的順序。比如:

int add(int x,int y=5,int z=6);   //正確

int add(int x=1,int y=5,int z);   //錯誤

int add(int x=1,int y,int z=6);   //錯誤

呼叫出現在函式體實現之前時,預設形參值必須在函式原型中也就是宣告時給出;而當呼叫出現在函式體實現之後時,預設形參值需在函式實現時給出。例如:

呼叫在實現前時:

int add(int x=5,int y=6);

int main()

int add(int x,int y)

呼叫在實現後時:

int add(int x=5,int y=6)

int main()

在相同的作用域內,預設形參值的說明應保持惟一,但如果在不同的作用域內,允許說明不同的預設形參。這裡的作用域是指直接包含函式原型說明的大括號所界定的範圍。例:

int add(int x=1,int y=2);

int main()

void fun

()三.內聯函式

函式雖然有很多優點,比如**復用,便於維護等。但是呼叫函式時需要儲存現場和返回位址,被調函式執行完後還要取出這些值繼續執行,這些過程在時間和空間方面都有開銷。對於一些規模小、功能簡單的函式可以定義成內聯函式。內聯函式在呼叫時不需要那些轉移帶來的開銷,它是在編譯的時候把函式體**嵌入到所有呼叫它的語句處,我們可以認為直接把函式體的**放那裡了,當然也不完全一樣,畢竟它可能有引數。

內聯函式定義時使用關鍵字inline,語法形式如下:

inline  型別識別符號  被調函式名(含型別說明的形參表)

使用內聯函式時必須注意:內聯函式體內不能有迴圈語句和switch語句;內聯函式的定義必須出現在內聯函式第一次被呼叫之前;對內聯函式不能進行異常介面宣告,就是不能宣告可能丟擲的異常。

內聯函式應該是語句比較少、結構比較簡單的函式,不應該是複雜的函式,因為它對編譯器來說就是**,如果很複雜會造成**膨脹,反而增大開銷,這種情況下其實多數編譯器就都會自動把它作為普通函式來處理了。一般來說,包含迴圈語句的函式一定不能定義成內聯函式。舉乙個內聯函式的例子:

#include

using namespace std;

inline double calarea(double radius)

int main()

{double r(3.0);

double area;

area=calarea(r);

cout《執行結果是:28.26

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

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

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...