一、函数指针
函数指针是指向函数的指针变量,它可以让我们在运行时动态地选择要调用的函数。
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
int (*funcPtr)(int, int); // 声明一个函数指针
funcPtr = add; // 函数指针指向add函数
printf("5 + 3 = %d\n", funcPtr(5, 3));
funcPtr = subtract; // 函数指针指向subtract函数
printf("5 - 3 = %d\n", funcPtr(5, 3));
return 0;
}
函数指针的声明格式为 返回类型 (*指针变量名)(参数列表)
。在这个例子中,funcPtr
是一个指向函数的指针变量,它可以指向 add
函数或 subtract
函数。
二、函数作为参数传递
在C语言中,函数可以作为 ‘参数’,传递给其他函数,这种技术通常被用于回调函数等场景。
#include <stdio.h>
void process(int (*func)(int, int), int a, int b) {
printf("结果:%d\n", func(a, b));
}
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main() {
process(add, 5, 3); // 将add函数作为参数传递给process函数
process(subtract, 5, 3); // 将subtract函数作为参数传递给process函数
return 0;
}
在这个例子中,process
函数接受一个函数指针作为参数,然后调用这个函数指针指向的函数。
三、函数库
函数库是一组函数的集合,它们可以在多个程序中重复使用。你可以将自己写的一些常用函数或者一些常见的功能打包成函数库,以便在需要的时候直接调用。
// mymath.h
#ifndef MYMATH_H
#define MYMATH_H
int add(int a, int b);
int subtract(int a, int b);
#endif
// mymath.c
#include "mymath.h"
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
在编写程序时,只需包含函数库的头文件,并链接函数库即可使用其中的函数。
#include <stdio.h>
#include "mymath.h"
int main() {
printf("5 + 3 = %d\n", add(5, 3));
printf("5 - 3 = %d\n", subtract(5, 3));
return 0;
}