一、函數的概念
函數是將一組語句放在一起執行一個特定任務的單元。C語言編程的所有程序都是由一個或多個函數組成的。函數是C語言程序中的基本模塊,程序是通過調用函數來執行各種操作的。
在C語言中,一個函數由函數頭和函數體組成。函數頭的形式如下:
返回類型 函數名 (參數列表)
返回類型指定函數的返回值類型,由C語言數據類型中的任何一種取值。函數名是唯一標識函數的符號,用於調用函數。參數列表是傳遞給函數的參數列表,也就是函數要處理的數據。
二、函數的定義
C語言函數定義的一般形式如下:
返回類型 函數名 (參數列表) { 函數體 }
函數名由一個標識符組成,用於標識該函數。參數列表是由零個或多個參數組成的,每個參數是由其類型和名字組成的。函數體由一組語句組成,這些語句描述了函數執行的操作。
下面是一個簡單的函數示例:
#include void print_message(void); int main() { print_message(); // 調用函數 return 0; } // 函數定義 void print_message(void) { printf("Hello World\n"); }
在上面的示例中,print_message()是函數名,該函數沒有任何參數和返回值。函數被調用時,它會打印“Hello World”這個字符串。
三、函數的參數傳遞
C語言中函數可以使用參數傳遞數據。C語言中有兩種參數傳遞方式:值傳遞和引用傳遞。
值傳遞是指傳遞參數的值,函數對參數進行操作不影響原始數據。下面是一個值傳遞的示例:
#include void swap(int x, int y); int main() { int a = 100; int b = 200; printf("交換前 a 的值:%d\n", a ); printf("交換前 b 的值:%d\n", b ); /* 調用函數來交換值 */ swap(a, b); printf("交換後 a 的值:%d\n", a ); printf("交換後 b 的值:%d\n", b ); return 0; } void swap(int x, int y) { int temp; temp = x; /* 保存 x 的值 */ x = y; /* 把 y 賦值給 x */ y = temp; /* 把原來的 x 值賦值給 y */ return; }
在上面的示例中,swap函數中的變量x和y與main函數中的a和b不是同一個變量。函數執行時,swap函數中的變量只是main函數中變量值的副本。swap函數中對x和y的操作不影響main函數中的a和b。
引用傳遞是指傳遞指針,函數可以通過指針修改原始數據。下面是一個引用傳遞的示例:
#include /* 函數聲明 */ void swap(int *x, int *y); int main () { /* 局部變量定義 */ int a = 100; int b = 200; printf("交換前,a 的值:%d\n", a ); printf("交換前,b 的值:%d\n", b ); /* 調用函數來交換值 */ swap(&a, &b); printf("交換後,a 的值:%d\n", a ); printf("交換後,b 的值:%d\n", b ); return 0; } void swap(int *x, int *y) { int temp; temp = *x; /* 保存地址 x 的值 */ *x = *y; /* 把 y 賦值給 x */ *y = temp; /* 把 x 賦值給 y */ return; }
在上面的示例中,swap函數中的x和y是指向main函數中a和b的指針。函數中對指針的操作可以影響main函數中的a和b。
四、函數的返回值
函數可以有一個返回值,返回值的類型必須與函數聲明的返回類型相同。下面是一個返回值的示例:
#include /* 函數聲明 */ int max(int num1, int num2); int main () { /* 局部變量定義 */ int a = 100; int b = 200; int ret; /* 調用函數來獲取最大值 */ ret = max(a, b); printf( "最大值是:%d\n", ret ); return 0; } /* 函數返回兩個數中較大的那個數 */ int max(int num1, int num2) { /* 局部變量聲明 */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
在上面的示例中,max函數返回的是num1和num2中的最大值。main函數獲取到返回值後,使用printf函數輸出了返回值。
五、函數的遞歸
遞歸是指一個函數可以調用自身的行為。遞歸函數包含兩個基本部分:遞歸調用和遞歸返回條件。下面是一個遞歸的示例:
#include /* 函數聲明 */ unsigned long long fib(int n); int main() { int n = 9; printf("%d項斐波那契數列的值為:%lld\n", n, fib(n)); return 0; } /* 斐波那契數列的遞歸函數 */ unsigned long long fib(int n) { if (n == 0 || n == 1) return n; else return fib(n - 1) + fib(n - 2); }
上面的示例是斐波那契數列的遞歸函數。該函數可以計算第n項斐波那契數列的值。在函數中,當n為0或1時,遞歸結束。否則,遞歸調用函數本身計算n-1和n-2項斐波那契數列的值。
原創文章,作者:OAIRZ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/368296.html