如何使用单个函数指针调用多个C语言函数?
使用同一函数指针调用多个函数的实现方法
先看你提供的原始代码:
#include <stdio.h> int sum(int, int); int sub(int, int); int mul(int, int); int sum(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 main() { int (*fptr)(int, int); fptr = ∑ int val = (fptr)(2,v3); printf("Sum: %d", val); return 0; }
要复用同一个fptr调用sum、sub、mul三个函数,其实只需要给这个函数指针重复赋值不同的函数地址就行,另外注意原代码里的v3是未定义变量,得改成合法数值(比如3)。修改后的完整代码如下:
#include <stdio.h> int sum(int, int); int sub(int, int); int mul(int, int); int sum(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 main() { int (*fptr)(int, int); int val; int num1 = 8, num2 = 3; // 调用sum函数 fptr = sum; // 函数名本身就是地址,&可以省略 val = fptr(num1, num2); printf("Sum: %d\n", val); // 调用sub函数 fptr = sub; val = fptr(num1, num2); printf("Sub: %d\n", val); // 调用mul函数 fptr = mul; val = fptr(num1, num2); printf("Mul: %d\n", val); return 0; }
关键说明:
- 函数指针
int (*fptr)(int, int)的类型和sum、sub、mul的函数签名完全一致,所以可以直接赋值函数名(函数名等价于函数的地址,加不加&都可以) - 每次调用不同函数前,给
fptr重新赋值对应的函数地址,就能用同一个指针执行不同的逻辑 - 调用函数指针时,
fptr(a,b)和(*fptr)(a,b)两种写法都合法,效果完全一样
内容的提问来源于stack exchange,提问作者IndyRose
相关产品推荐
相关产品推荐

