1、将函数作为参数传递
将函数作为参数传递给另一个函数,实际上就是将函数指针作为参数传递。这样,被调用的函数就可以根据传入的函数指针来调用不同的函数。
#include <stdio.h> // 一个简单的函数,计算两个整数的和 int add(int a, int b) { return a + b; } // 另一个函数,计算两个整数的差 int subtract(int a, int b) { return a - b; } // 接受一个函数指针作为参数的函数 void operate(int a, int b, int (*operation)(int, int)) { int result = operation(a, b); // 调用传入的函数 printf("Result: %d\n", result); } int main() { int x = 5, y = 3; // 将 add 函数作为参数传递给 operate operate(x, y, add); // 输出 Result: 8 // 将 subtract 函数作为参数传递给 operate operate(x, y, subtract); // 输出 Result: 2 return 0; }
2、函数指针的声明和使用
函数指针是指向函数的指针变量。就像普通指针指向变量一样,函数指针指向函数。通过函数指针,我们可以间接调用函数,实现函数的动态绑定。
1)函数指针的声明
函数指针的声明格式如下,
return_type (*pointer_name)(parameter_types);
return_type
是函数返回值的类型
pointer_name
是指针的名称
parameter_types
是函数的参数类型
2)将函数指针作为参数传递给另一个函数
#include <stdio.h> // 定义一个函数,返回int,接受两个int参数 int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } // 定义一个函数,接受一个函数指针作为参数 // 该指针指向一个接受两个int参数并返回int的函数 int operate(int a, int b, int (*operation)(int, int)) { return operation(a, b); } int main() { int x = 10, y = 5; // 将 add 函数作为参数传递给 operate 函数 printf("Add: %d\n", operate(x, y, add)); // 将 subtract 函数作为参数传递给 operate 函数 printf("Subtract: %d\n", operate(x, y, subtract)); return 0; }
3、复杂的函数指针
可以让函数指针指向一个返回 void
的函数。
#include <stdio.h> // 计算并输出两个数的和 void print_sum(int a, int b) { printf("Sum: %d\n", a + b); } // 接受函数指针作为参数 void execute(void (*func)(int, int), int a, int b) { func(a, b); // 调用传入的函数 } int main() { int x = 5, y = 3; execute(print_sum, x, y); // 输出 Sum: 8 return 0; }
4、返回函数指针
函数可以返回函数指针,可以通过这种方式返回一个指向函数的指针,并在其他地方使用它。
#include <stdio.h> // 返回一个指向函数的指针 int (*get_operator(char op))(int, int) { if (op == '+') { return add; } else if (op == '-') { return subtract; } else { return NULL; } } // 两个简单的运算函数 int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int main() { int (*operation)(int, int); operation = get_operator('+'); // 获取加法操作的函数指针 printf("Result: %d\n", operation(5, 3)); // 输出 8 operation = get_operator('-'); // 获取减法操作的函数指针 printf("Result: %d\n", operation(5, 3)); // 输出 2 return 0; }