一、函数基础知识
函数是程序的基本组成部分之一,它可以完成特定的任务,将复杂的问题分解成若干个小问题进行解决。函数可以接受自变量(参数)并返回结果。在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; }