目录
一、函数的概述
1、函数:为实现相同功能的代码 封装成一个整体,可以多次调用。
实参传数据给函数形参。
函数功能代码通过函数体实现
注意函数返回值类型
二、函数的分类
1、定义角度
库函数、自定义函数、系统调用(内核提供给用户的函数接口)
2、形参角度
无参的函数:不能将函数外部的数据 传递 给函数内部
有参的函数:通过参数将函数外部的数据传递到函数内部
(参数:函数外部数据 到 函数内部的 桥梁)
三、函数声明、定义、调用。(以两数相加为例)
1、函数声明(先调用 后定义情况使用,写在调用前)
告知编译器 该函数的函数名、形参及返回值类型
2、函数定义
确定函数名、函数的形参、函数的返回值类型,实现函数体功能
3、函数调用
执行函数体。函数名+(实参);
完整代码:
四、函数传参
1、普通变量作为函数的参数。
普通变量 就要作为函数的 形参 (单向传递之值传递,即形参的值改变不会影响到实参):函数内部需要使用外部变量的值时需要将外部变量的值传递给函数内部。
形参的值改变不会影响到实参:
2、数组作为函数的参数。
函数内部 可以操作(读写)外部数组的元素。
以对数组排序为例:
函数声明:void inputIntArray(int arr[], int n);
函数调用:inputIntArray(arr, n);
函数定义:
完整代码:
1 void inputIntArray(int arr[], int n);
2 void printfIntArray(int arr[], int n);
3 void sortIntArray(int arr[], int n);
4 void test()
5 {
6 int arr[5] = {0};
7 int n = sizeof(arr) / sizeof(arr[0]);
8
9 //给数组获取键盘输入
10 inputIntArray(arr, n);
11
12 //对数组进行排序
13 sortIntArray(arr, n);
14
15 //遍历排序后的数组元素
16 printfIntArray(arr, n);
17
18 return;
19 }
20 int main(int argc, char const *argv[])
21 {
22 test();
23 return 0;
24 }
25
26 void sortIntArray(int arr[], int n)
27 {
28 int i = 0;
29 for (i = 0; i < n ‐ 1; i++)
30 {
31 int min = i;
32 int j = min + 1;
33
34 for (; j < n; j++)
35 {
36 if (arr[min] > arr[j])
37 min = j;
38 }
39
40 if (i != min)
41 {
42 int tmp = arr[i];
43 arr[i] = arr[min];
44 arr[min] = tmp;
45 }
46 }
47
48 return;
49 }
50 void inputIntArray(int arr[], int n)
51 {
52 printf("请输入%d个int元素\n", n);
53
54 int i = 0;
55 for (i = 0; i < n; i++)
56 {
57 scanf("%d", &arr[i]);
58 }
59
60 return; //结束标记
61 }
62 void printfIntArray(int arr[], int n)
63 {
64 int i = 0;
65 for (i = 0; i < n; i++)
66 {
67 printf("%d ", arr[i]);
68 }
69 printf("\n");
70
71 return;
72 }
3、字符数组作为函数的参数。
以测量字符串长度为例:
函数声明:void my_get_string(char str[], unsigned long n);
函数调用:my_get_string(str, sizeof(str));
函数定义:
完整代码:
1 #include <string.h>
2 void my_get_string(char str[], unsigned long n);
3 int my_strlen(char str[]);
4 void test05()
5 {
6 char str[128] = "";
7
8 //键盘获取字符串
9 my_get_string(str, sizeof(str));
10
11 //定义函数my_strlen测量字符串的参数
12 printf("字符串的长度为%d\n", my_strlen(str));
13 }
14 int main(int argc, char const *argv[])
15 {
16 test05();
17 return 0;
18 }
19 int my_strlen(char str[])
20 {
21 int i = 0;
22 while (str[i] != '\0')
23 {
24 i++;
25 }
26
27 return i;
28 }
29 void my_get_string(char str[], unsigned long n)
30 {
31 printf("请输入一个字符串:");
32 fgets(str, n, stdin);
33 str[strlen(str) ‐ 1] = 0; //去掉回车
34
35 return;
36 }
四、函数指针
函数指针是指向函数的指针变量,它可以存储函数的地址,方便在程序中动态调用函数
语法:返回值类型 (*指针变量名)(形参类型列表)
例如,下面定义了一个名为 add 的函数,它的作用是求两个整数的和:
int add(int a, int b) {
return a + b;
}
定义一个指向 add 函数的函数指针,通过函数指针调用函数:
int (*p)(int, int);
p = add;
int a = 3, b = 4;
int c = (*p)(a, b);
printf("add(%d, %d) = %d\n", a, b, c);