一、函數基礎知識
函數是程序的基本組成部分之一,它可以完成特定的任務,將複雜的問題分解成若干個小問題進行解決。函數可以接受自變數(參數)並返回結果。在C語言中,函數是由函數名、返回類型、參數列表和函數體四部分組成。
函數名是一個標識符,用來標識一個函數。函數返回類型指的是該函數執行完畢後會返回的數據類型。參數列表是在函數定義時聲明的,用來傳遞數據給函數。函數體是由一系列語句組成的代碼塊,該代碼塊完成函數的工作。
#include <stdio.h> /*函數聲明*/ int max(int x, int y); /*主函數*/ int main () { /*定義變數*/ int a = 100; int b = 200; int ret; /*調用函數*/ ret = max(a, b); printf( "Max value is : %d\n", ret ); return 0; } /*函數返回兩個數中較大的那個數*/ int max(int x, int y) { int result; if (x > y) result = x; else result = y; return result; }
二、函數參數傳遞方式
C語言中函數參數的傳遞方式有值傳遞和指針傳遞兩種方式。在值傳遞中,函數調用時實參的值會被複制到形參,函數體中對形參的修改對實參沒有影響。而在指針傳遞中,傳遞的是實參的地址,函數體中對形參的修改會直接影響到實參的值。
#include <stdio.h> /*函數聲明*/ void swap(int *x, int *y); /*主函數*/ int main () { /*定義變數*/ int a = 100; int b = 200; printf("Before swap, value of a : %d\n", a ); printf("Before swap, value of b : %d\n", b ); /*調用函數*/ swap(&a, &b); printf("After swap, value of a : %d\n", a ); printf("After swap, value of b : %d\n", b ); return 0; } /*函數交換兩個數的值*/ void swap(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; return; }
三、遞歸函數
遞歸函數是指在函數體內部調用自身的函數。這種函數可以同樣地解決問題,但是代碼更加簡潔,可讀性更強。在使用遞歸函數時需要考慮到遞歸的終止條件,否則會導致無限遞歸。
#include <stdio.h> /*函數聲明*/ int factorial(int n); /*主函數*/ int main () { /*定義變數*/ int n = 5; /*調用函數*/ printf("Factorial of %d is %d\n", n, factorial(n)); return 0; } /*遞歸計算階乘*/ int factorial(int n) { if (n == 0) return 1; else return n * factorial(n - 1); }
四、頭文件和預處理器指令
C語言中的頭文件和預處理器指令可以方便地解決代碼重用和編譯問題。頭文件是包含函數聲明和宏定義的文本文件,可以通過#include指令引用。在編程過程中,使用頭文件可以減少代碼量,使代碼更加簡潔易懂。
預處理器指令用於在編譯前對程序進行預處理,在代碼執行之前進行一系列的處理,比如對代碼進行宏展開、條件編譯等等,提高了程序的效率。
#include <stdio.h> #define PI 3.14159 /*主函數*/ int main () { /*定義變數*/ float r = 5.0; float area; /*計算圓的面積*/ area = PI * r * r; printf( "Area of circle is : %f", area); return 0; }
五、函數指針
函數指針是指向函數的指針變數,可以用來實現回調函數和動態綁定的功能。在使用函數指針的時候,需要使用一個指針變數存儲函數的地址,並且這個指針變數的類型和函數的返回類型以及參數列表必須匹配。
#include <stdio.h> /*函數聲明*/ int sum(int a, int b); /*主函數*/ int main () { /*定義變數*/ int a = 10; int b = 20; int (*p)(int, int); /*賦值函數指針*/ p = sum; /*調用函數指針*/ printf("The sum of %d and %d is %d", a, b, (*p)(a, b)); return 0; } /*求和函數*/ int sum(int a, int b) { return a + b; }
原創文章,作者:VAMKI,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/360629.html