完整示例代码
- #include <stdio.h>
- // 函数声明
- int add(int a, int b);
- int sub(int a, int b);
- int mul(int a, int b);
- // 函数指针类型定义
- typedef int (*ArithmeticFunc)(int, int);
- // 函数实现
- int add(int a, int b) { return a + b; }
- int sub(int a, int b) { return a - b; }
- int mul(int a, int b) { return a * b; }
- // 接受函数指针作为参数的函数
- int calculate(int a, int b, ArithmeticFunc op) {
- if(!op) {
- printf("无效操作!\n");
- return 0;
- }
- return op(a, b);
- }
- // 根据操作符返回函数指针
- ArithmeticFunc get_operation(char op) {
- switch(op) {
- case '+': return add;
- case '-': return sub;
- case '*': return mul;
- default: return NULL;
- }
- }
- int main() {
- int a = 20, b = 5;
-
- // 1. 直接使用函数指针
- ArithmeticFunc func_ptr = add;
- printf("直接调用: %d + %d = %d\n", a, b, func_ptr(a, b));
-
- // 2. 使用函数指针数组
- ArithmeticFunc operations[] = {add, sub, mul};
- char* names[] = {"加法", "减法", "乘法"};
-
- printf("\n函数指针数组:\n");
- for(int i = 0; i < 3; i++) {
- printf("%s: %d\n", names[i], operations[i](a, b));
- }
-
- // 3. 函数指针作为参数
- printf("\n函数指针作为参数:\n");
- printf("加法结果: %d\n", calculate(a, b, add));
- printf("减法结果: %d\n", calculate(a, b, sub));
-
- // 4. 函数指针作为返回值
- printf("\n函数指针作为返回值:\n");
- ArithmeticFunc op = get_operation('*');
- if(op) {
- printf("乘法结果: %d\n", op(a, b));
- }
-
- // 5. 指向函数指针的指针
- printf("\n指向函数指针的指针:\n");
- ArithmeticFunc *func_ptr_ptr = &func_ptr;
- printf("通过双重指针调用: %d + %d = %d\n", a, b, (*func_ptr_ptr)(a, b));
-
- return 0;
- }
|