C語言函式



C語言中的函式是一塊組織良好的可重用程式碼塊,它執行單個相關的操作。每個C程式至少有一個函式,即main(),即使是最簡單的程式也可以定義附加函式。

當某個問題的演算法涉及冗長而複雜的邏輯時,它會被分解成更小、獨立且可重用的塊。這些小的程式碼塊在不同的程式語言中被稱為不同的名稱,例如模組子程式函式方法

您可以將程式碼分成單獨的函式。如何將程式碼劃分到不同的函式中取決於您,但邏輯上劃分是使每個函式執行特定任務。

函式宣告告訴編譯器函式的名稱、返回型別和引數。函式定義提供函式的實際主體。

C標準庫提供了許多內建函式,您的程式可以呼叫這些函式。例如,strcat()用於連線兩個字串,memcpy()用於將一個記憶體位置複製到另一個位置,以及許多其他函式。

C語言中的模組化程式設計

函式旨在執行作為整個過程一部分的特定任務。這種軟體開發方法稱為模組化程式設計

模組化程式設計採用自頂向下的軟體開發方法。程式設計解決方案有一個主例程,透過它呼叫更小的獨立模組(函式)。

每個函式都是一個獨立的、完整的、可重用的軟體元件。當被呼叫時,函式執行指定的任務並將控制權返回給呼叫例程,可以選擇性地連同其過程的結果一起返回。

這種方法的主要優點是程式碼變得易於理解、開發和維護。

C語言中的庫函式

C語言提供許多包含在不同標頭檔案中的庫函式。例如,stdio.h標頭檔案包含printf()和scanf()函式。類似地,math.h標頭檔案包含許多函式,例如sin()、pow()、sqrt()等等。

這些函式執行預定義的任務,可以根據需要在任何程式中呼叫。但是,如果您找不到合適的庫函式來滿足您的目的,您可以自己定義一個。

在C語言中定義函式

在C語言中,有必要提供任何函式原型的向前宣告。庫函式的原型存在於相應的標頭檔案中。

對於使用者定義的函式,其原型存在於當前程式中。函式的定義及其原型宣告應該匹配。

執行函式中的所有語句後,程式的流程返回到呼叫環境。函式可能隨流程控制一起返回一些資料。

C語言中的函式宣告

函式宣告告訴編譯器函式名稱以及如何呼叫函式。函式的實際主體可以單獨定義。

函式宣告包含以下部分:

return_type function_name(parameter list);

對於上面定義的函式max(),函式宣告如下:

int max(int num1, int num2);

引數名稱在函式宣告中並不重要,只需要它們的型別,因此以下也是有效的宣告:

int max(int, int);

當您在一個原始檔中定義一個函式並在另一個檔案中呼叫該函式時,需要函式宣告。在這種情況下,您應該在呼叫該函式的檔案頂部宣告該函式。

C語言中函式的組成部分

C程式語言中函式定義的一般形式如下:

return_type function_name(parameter list){
   
   body of the function
}

C程式設計中的函式定義由函式頭函式體組成。以下是函式的所有部分:

  • 返回型別 - 函式可以返回值。return_type是函式返回值的資料型別。有些函式執行所需的操作而不返回值。在這種情況下,return_type是關鍵字void。
  • 函式名稱 - 這是函式的實際名稱。函式名稱和引數列表一起構成函式簽名。
  • 引數列表 - 引數(也稱為引數)就像一個佔位符。當呼叫函式時,您將值作為引數傳遞。此值稱為實際引數或引數。引數列表是指函式的引數的型別、順序和數量。引數是可選的;也就是說,函式可能不包含引數。
  • 函式體 - 函式體包含定義函式作用的一組語句。

C語言中的函式應該有返回型別。函式返回的變數的型別必須是函式的返回型別。在上圖中,add()函式返回int型別。

示例:C語言中的使用者自定義函式

在這個程式中,我們使用了名為max()的使用者自定義函式。此函式接受兩個引數num1num2,並返回兩者之間的最大值:

#include <stdio.h>

/* function returning the max between two numbers */
int max(int num1, int num2){

   /* local variable declaration */
   int result;
   
   if(num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

int main(){
   printf("Comparing two numbers using max() function: \n");
   printf("Which of the two, 75 or 57, is greater than the other? \n");
   printf("The answer is: %d", max(75, 57));
    
   return 0;
}

輸出

執行此程式碼時,將產生以下輸出:

Comparing two numbers using max() function: 
Which of the two, 75 or 57, is greater than the other? 
The answer is: 75

在C語言中呼叫函式

在建立C函式時,您會定義函式必須執行的操作。要使用函式,您必須呼叫該函式以執行已定義的任務。

要正確呼叫函式,您需要遵守函式原型的宣告。如果函式被定義為接收一組引數,則必須傳遞相同數量和型別的引數。

當函式定義包含引數時,函式名前面的引數稱為**形式引數**。當呼叫函式時,傳遞給它的引數是**實際引數**。

當程式呼叫函式時,程式控制權將轉移到被呼叫的函式。被呼叫的函式執行定義的任務,當執行其返回語句或到達其函式結束的閉合大括號時,它將程式控制權返回給主程式。

示例:呼叫函式

要呼叫函式,只需將所需的引數與函式名一起傳遞即可。如果函式返回一個值,則可以儲存返回的值。請看下面的例子:

#include <stdio.h>
 
/* function declaration */
int max(int num1, int num2);
 
int main (){

   /* local variable definition */
   int a = 100;
   int b = 200;
   int ret;
 
   /* calling a function to get max value */
   ret = max(a, b);
 
   printf( "Max value is : %d\n", ret );
 
   return 0;
}
 
/* function returning the max between two numbers */
int max(int num1, int num2){

   /* local variable declaration */
   int result;
 
   if (num1 > num2)
      result = num1;
   else
      result = num2;
 
   return result; 
}

輸出

我們將max()與main()一起保留,並編譯了原始碼。執行最終的可執行檔案時,將產生以下結果:

Max value is : 200

C語言中的main()函式

C程式是由一個或多個函式組成的集合,但其中一個函式必須命名為**main()**,它是程式執行的入口點。

從main()函式內部,可以呼叫其他函式。main()函式可以呼叫庫函式,例如printf(),其原型是從標頭檔案(stdio.h)或程式碼中存在的任何其他使用者定義的函式中獲取的。

在C語言中,程式的定義順序無關緊要。在一個程式中,無論main()是第一個函式還是其他位置,它都是入口點。

**注意:**在C語言中,任何函式都可以呼叫任何其他函式,並且可以呼叫任意次數。函式也可以呼叫自身。這種自呼叫的函式稱為**遞迴函式**。

函式引數

如果函式要使用引數,它必須宣告接受引數值的變數。這些變數稱為函式的**形式引數**。

形式引數在函式內部的行為類似於其他區域性變數,在進入函式時建立,在退出函式時銷燬。

呼叫函式時,引數傳遞給函式有兩種方式:

序號 呼叫型別和描述
1 值傳遞

此方法將引數的實際值複製到函式的形式引數中。在這種情況下,對函式內部引數所做的更改不會影響引數本身。

2 引用傳遞

此方法將引數的地址複製到形式引數中。在函式內部,該地址用於訪問呼叫中使用的實際引數。這意味著對引數所做的更改會影響引數本身。

預設情況下,C語言使用**值傳遞**來傳遞引數。一般來說,這意味著函式內的程式碼無法更改用於呼叫函式的引數。

廣告