函数
函数的定义
函数的传参
-
主函数参数
-
值传递
- 地址传递
函数的返回值
-
主函数返回值
-
函数的返回值是给其父进程看的,谁创建它谁就是它的父进程。
-
某一个函数未包含头文件,那么编译器会认为它返回int。必须正确包含头文件。
函数的调用
- 函数调用是压栈和弹栈(嵌套调用、递归调用)
函数与数组
-
函数传递一维数组的地址,并不知道该数组的长度,应当再传递int size;
-
函数传递二维数组的地址,并不知道该数组的长度,应当再传递n行,m列;
#include <stdio.h> // void print_arr(int p[][3], int n, int m) void print_arr(int(*p)[3], int n, int m) { int i = 0, j = 0; for (i = 0; i < n; i += 1) { for (j = 0; j < m; j += 1) { printf("%4d", *(*(p + i) + j)); } printf("\n"); } return ; } int main(void) { int arr[3][3] = { 1, 2, 3 }; print_arr(arr, 3, 3); return 0; }
函数与指针
-
指针函数:返回值为指针的函数。
-
函数指针:指向函数的指针。
-
抽象一个函数类型(构建回调函数)
-
函数指针数组:数组的每一个元素(函数指针)指向函数。
#include "tools.h" #define N 3 int add(int a, int b) { return a + b; } int main(void) { // 函数指针数组 int(*funcarr[N])(int, int) = { add, add, add }; int i = 0; for (i = 0; i < N; i += 1) { printf("%p -> RUN FUNC: %d\t", funcarr + i, (*(funcarr + 1))(5, 6)); // 或 printf("%p -> RUN FUNC: %d\n", funcarr + i, funcarr[i](5, 6)); } return 0; }
-
示例:指向指针函数的函数指针数组