自定義函式及函式呼叫

2021-09-22 02:35:07 字數 1287 閱讀 3052

在論壇中,發現有的道友對自定義函式的呼叫存在這以下問題:

1、自定義函式宣告、函式呼叫、函式實現概念混淆

2、形參和實參混淆;

3、自定義函式引數的傳值方式混淆;傳來傳去都不知道傳的到底是什麼?

接下來,我就重點圍繞道友們常見的問題,說一說:

1、自定義函式宣告、函式呼叫、函式實現

比如:交換兩個數的值的自定義函式swap

函式宣告方式: void swap(int &a,int &b);

函式實現方式:void swap(int &a,int &b)

函式呼叫方式:swap(a,b);

通過這個例項就可以明顯看到三者之間的區別。但是要說明幾點:

(1)函式呼叫方式裡面的引數名和函式宣告(實現)的引數名可以不相同,因為它只是乙個名字,只需要保證他們引數的型別和引數的個數一致;

(2)函式宣告和實現方式裡面的引數名、引數型別、以及引數個數必須一致。

2、形參和實參混淆

形參是函式實現(宣告)裡面的引數,而實參是函式呼叫裡面的引數;如:

void swap(int &a,int &b) 裡面a,b是形參

swap(a,b)裡面的a,b是實參

3、傳值和傳址方式

很多道友都知道傳值是把值傳進去,而傳址是把數的位址傳進去;

由於自定義函式在呼叫完成之後就會被釋放,所以如果採用傳值的方式,即使變數的值在自定義函式裡面發生了變化,也不會把變化的值傳回來,實質上不會改變變數的值。(引數的傳遞方式是單向的。)

而傳址是把位址傳進去,自定義函式是直接訪問的是變數的位址,然後把該位址儲存的數值改變了,所以即使自定義函式最終被釋放了,變數的值還是會改變。

明白這些後,很多道友又會有新問題,就是什麼時候傳值、什麼時候傳址?其實很簡單,如果你不需要改變變數的值就傳值,需要改變變數的值就傳址。例如:

(1)求和的自定義函式:get_sum,用傳值方式,因為實現的是求和,並不需要改變a,b的值,當然你也可以用傳址。

void get_sum(int a,int b)

(2)交換a,b的值:swap,用傳址方式,因為我要改變a,b的值;如果用傳值的話,a和b的值不會交換;

void swap(int &a,int &b)

總的來說,可以用傳值的,也可以用傳址;但是必須用傳址的,就不能用傳值方式。

為了便於道友們向我諮詢問題,特意開設了乙個免費的知識星球——captianxue,星球提供學習、理財、生活、職場等各類文章和免費答疑!!

自定義函式及函式的封裝

l 建立自定義函式的三種方式 js引擎預設以命名函式的形式來解讀函式,所以不能直接宣告匿名函式,解決方法 可以用變數 陣列或物件等資料將匿名函式儲存起來,例如button點選事件,以 及 var fn function a,b fn 100,200 對應呼叫 匿名函式的自呼叫 自執行匿名函式 新增括...

robot指令碼 呼叫自定義函式

例子 1.建標頭檔案 2.建包含自定義函式的檔案 3.新建指令碼,使用標頭檔案的引數,呼叫函式 標頭檔案 header.sbh 包含自定義函式的檔案 fun.sbl 這兩個檔案的路徑都放在此預設路徑下 rationalaccess testdatastore defaulttestscriptdat...

自定義函式 Excel之自定義函式

在excel中,當系統函式不能滿足我們的需求時候,我們可以使用vba自定義函式,如抓取網頁資料,翻譯詞彙,手機號歸屬地查詢等。下面將介紹2個自定義函式,idymd函式 身份證年月日性別 通過身份證號,返回性別,出生年月日。語法 idymd id 引數 id,身份證號,預設身份證長度18位。vba 如...