學習筆記之C 函式

2021-08-29 07:42:43 字數 2453 閱讀 1246

形參:在定義函式時函式名後面括號中的變數名叫做形式引數,簡稱形參。形參是無記憶體單元(因而不存在)的任何合法識別符號。

實參:在呼叫乙個函式時,出現在呼叫語句函式名後面括號中的引數叫做實際引數,簡稱實參。實參是實際存在(因而有特定值)的常量、變數或表示式。

說明:1. 在定義函式時指定的形參,在未被呼叫時它們並不占用記憶體中的儲存單元,實際上也就是不存在的,因此稱它們是形式引數或虛擬引數,表示它們並不是實際存在的資料,只有在函式呼叫發生時,被調函式中的形參才會被分配記憶體單元,以便接收從實參傳來的資料。在呼叫結束後(即函式值返回後),形參所占用的記憶體單元也被釋放(即形參又不存在了)。

2. 實參可以是常量、變數或者表示式,但作為實參表示式中的變數必須有確定值,以使得整個實參表示式有確定的值。

3. 在定義函式時,必須在函式首部指定形參的型別,至於形參使用何名字可隨意。

4. 實參和形參的型別應該相同或者賦值相容。兩種引數型別完全一致無疑是完全合法、正確的。如果實參為整型而形參為浮點型,或者相反,則按不同型別數值的賦值規則進行轉換,原則上不出現語法錯誤,但結果可能帶來某些非期望的誤差。例如實參的值是3.5,而被調函式的形參型別為整型,則呼叫函式會將3.5轉化為整數3,然後送到形參,故此時形參值為3,由3計算出的函式值與用3.5計算出的函式值肯定有差別。

函式型別關鍵字 函式名([形式引數列表])

宣告語句

執行語句

}      (函式定義結束無分號

1. 如果在函式首部函式名後面括號裡省略形式引數(即為空括號)或者括號內填寫void關鍵字,該函式就成為乙個無參函式;

2. 如果在函式首部函式名後面括號裡填寫了形式引數,則它就是有參函式,有參函式通過引數列表列出每個引數的資料型別、引數 量名,若引數不止乙個,則每個引數之間用逗號分割。

3. 如果主調函式書寫在前,被調函式書寫在後(或書寫在別的檔案中),或者被調函式是庫函式,那麼都需要先對被調函式提出宣告,然後才能呼叫。宣告的實際作用是提前通知編譯系統有什麼函式將被呼叫。只有下列特殊情況才不需要宣告:被調函式是自定義函式,而且該函式出現在同一檔案的主調函式之前,後面的主調函式已經知道它的存在,所以不需要宣告。

4. 對庫函式宣告時只要在程式檔案頭部用include語句將這些包含檔案包含到程式中來,就等於完成了對庫函式的宣告。

5. 對自定義函式的宣告。必須在呼叫某自定義函式的語句出現之前,先做出如下宣告:

函式型別關鍵字 函式名([引數1型別,引數1名稱],[引數2型別,引數2名稱],,...);           (函式宣告結束有分號)

在宣告語句中,引數名稱可以省略,或者任意寫乙個名稱,這種寫法表示的形式叫做函式原型,即宣告函式原型。函式原型有以下兩種表示形式:

函式型別關鍵字 函式名([引數1型別],[引數2型別],,...);   

函式型別關鍵字 函式名([引數1型別,識別符號1],[引數2型別,識別符號2],,...);       

所謂函式的返回值就是該函式的函式值。函式的返回值是通過函式定義中的return語句返回到主調函式的。

如果乙個函式有返回值(即函式不是void函式),那麼該函式的定義中必須有乙個return語句;如果不需要函式返回值,則函式的定義中可以不要return語句。return語句的作用不僅可以將函式的值返回到主調函式,同時也是結束被調函式執行的語句。乙個函式中可以有乙個以上的return語句。返回值的型別由函式定義中的函式型別關鍵字唯一確定。

函式呼叫可能以下面三種形式出現:

1. 函式語句

把函式呼叫單獨作為乙個語句,並不要求函式返回值或者不需要函式的值,只是要把函式執行一遍以完成函式中的操作。如

output();

2. 函式表示式:對於有返回值的函式,函式呼叫可以出現在乙個表示式中,這是函式值被當作乙個參與表示式運算的資料。例如: 

c=3*max(2,3);

3. 函式引數:函式呼叫得到的值作為另一次函式呼叫的實際函式。例如:

m=max(3,max(6,8)); 

在呼叫乙個函式的過程中又出現直接或間接呼叫該函式本身的現象。例如:編寫遞迴呼叫函式計算n!的值。

思路:求n!,應該先求(n-1)!;而求(n-1)!,又需要求(n-2)!而求(n-2)!,又需要求(n-3)!......如此類推,直到最後變成求1!的問題,而根據公式有1!=1(這就是本問題中的遞迴終止條件)。設求n!的函式為fac(),函式體內求n!,只要n>1,可以用n*fac(n-1)表示,即fac()函式體內將遞迴呼叫fac()自身;但一旦引數n為1,則終止呼叫函式並給出函式值1。

#includeusing namespace std;

long fac()

else

} void main()

c 學習筆記之函式

函式按值傳遞和按位址傳遞 標頭檔案的建立 返回值型別 函式名引數列表 return type function name parameter list 返回值為int,函式名為sum,引數為兩個int型 intsum int int 函式原型 intmain 函式定義 intsum int num1...

C 學習筆記之虛函式

虛函式即在父類中成員函式錢加上virtual關鍵字,使得該成員函式具有動態鏈結屬性 因此函式具有了多型性 那麼什麼是動態鏈結呢?即程式在編譯階段不能確切知道將要呼叫的函式,只有在程式執行時才能確定將要呼叫的函式,要確切的知道呼叫的函式,要求聯編工作要在程式執行時進行,這種程式執行時進行的聯編稱之為動...

C 學習筆記之虛函式

1.聯編是電腦程式彼此關聯的過程,這個過程需要確定函式呼叫和執行函式呼叫的 之間的對映關係,按照聯編的不同階段,可以分為靜態聯編和動態聯編 2.靜態聯編 就是在程式執行之間執行的早期聯編,那麼在程式執行時就會按照靜態聯編的結果進行執行,這也就是為什麼一直執行的時父類的func,也就是說如果父類和子類...