C語言函數
函數是一組一起執行任務的語句。每一個C程序具有至少一個函數,它就是main()函數,以及所有的最微不足道的程序可以定義附加函數。
可以將代碼放到獨立的函數。如何劃分代碼之間的不同功能,但邏輯上的劃分通常是讓每個函數執行特定的任務。
函數聲明告訴編譯器有關的函數的名稱,返回類型和參數。一個函數定義提供了函數的實際主體。
C標準庫提供了大量的內置函數,供給程序調用。例如,strcat()函數連接兩個字符串,memcpy()函數複製一個存儲器位置到另一個位置,還有更多的函數。
函數是已知具有各種名稱等的方法或子例程或程序等。
定義一個函數:
在C語言函數定義的一般形式如下:
return_type function_name( parameter list ) { body of the function }
在C語言編程函數定義由函數頭和函數體。這裡是一個函數的所有部分:
-
返回類型: 函數會返回一個值。return_type是函數返回值的數據類型。有些函數執行所需的操作冇有返回值。在這種情況下,return_type是關鍵字void。
-
函數名稱: 這是該函數的實際名稱。函數名和參數列表一起構成了函數簽名。
-
參數: 參數是像一個占位符。當調用一個函數,傳遞參數的一個值。這個值被稱為實際參數或參數。參數列表指的類型,順序和數量的函數的參數。參數是可選的;也就是說,一個函數可包含任何參數。
-
函數體: 函數體包含了定義函數做什麼(命令)語句的集合。
例子:
下麵是一個函數的源代碼稱為max()。這個函數有兩個參數num1與num2並返回兩者之間的最大值:
/* 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; }
函數聲明:
函數聲明告訴編譯器有關的函數名以及如何調用該函數。該函數的實際體可以分彆進行定義。
函數聲明有以下幾個部分:
return_type function_name( parameter list );
對於上述定義的函數max(),下麵是函數聲明:
int max(int num1, int num2);
參數名不重要,在隻有類型是必需的,所以下麵的函數聲明是有效的聲明:
int max(int, int);
當定義在一個源文件中的函數調用在另一個文件中函數函數聲明是必需的。在這種情況下,應在調用函數的文件的頂部聲明函數。
調用一個函數:
當創建一個C函數,給什麼樣的函數必須做一個定義。要使用函數不得不調用該函數來執行規定的任務。
當程序調用函數,程序控製被轉移到所調用的函數。一個名為函數定義執行任務時,被執行return語句或達到其函數的右括號,則返回程序控製返回到主程序。
要調用一個函數,隻需要通過必要的參數以及函數的名稱,如果函數返回一個值,那麼可以存儲返回值。例如:
#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 ", 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語言使用調用按值傳遞參數。在一般情況下,這意味著一個函數中的代碼不能改變,調用函數的參數和上麵提到的例子,儘管調用max()函數使用同樣的方法。