#include <stdio.h>
#include <stdlib.h>
// 定义加法函数
int add(int a, int b) {
return a + b;
}
// 定义减法函数
int subtract(int a, int b) {
return a - b;
}
// 定义乘法函数
int multiply(int a, int b) {
return a * b;
}
// 定义除法函数
int divide(int a, int b) {
if (b == 0) {
printf("除数不能为0\n");
exit(EXIT_FAILURE);
}
return a / b;
}
int main() {
// 声明函数指针数组
int (*funcPtrArray[4])(int, int) = {add, subtract, multiply, divide};
int num1, num2;
char op;
printf("请输入两个数字和一个操作符(+,-,*,/): ");
if (scanf("%d %d %c", &num1, &num2, &op) != 3) {
printf("输入格式错误\n");
return 1;
}
int result;
switch (op) {
case '+':
result = funcPtrArray[0](num1, num2);
break;
case '-':
result = funcPtrArray[1](num1, num2);
break;
case '*':
result = funcPtrArray[2](num1, num2);
break;
case '/':
result = funcPtrArray[3](num1, num2);
break;
default:
printf("不支持的操作符\n");
return 1;
}
printf("结果是: %d\n", result);
return 0;
}
函数指针数组声明、初始化及调用注意事项
- 声明:
- 声明函数指针数组时,
int (*funcPtrArray[4])(int, int)
这种形式表示 funcPtrArray
是一个数组,数组有4个元素,每个元素是一个函数指针,该函数指针指向的函数接收两个 int
类型参数并返回一个 int
类型结果。
- 初始化:
- 在初始化函数指针数组时,直接将函数名赋值给数组元素。因为函数名在表达式中会被转换为函数指针,例如
funcPtrArray[0] = add;
这里 add
会被自动转换为指向 add
函数的指针。
- 初始化顺序要与后续使用的逻辑相对应,例如上面代码中,加法函数
add
对应数组下标0,减法函数 subtract
对应下标1等,这样在 switch
语句中根据操作符调用时才能正确对应。
- 调用:
- 在调用函数指针数组中的函数时,使用
funcPtrArray[index](arg1, arg2)
的形式,这里 index
是数组下标,arg1
和 arg2
是函数所需的参数。
- 要注意函数本身的逻辑,例如除法函数要处理除数为0的情况,在上述代码中,当除数为0时,程序会输出错误信息并退出。同时在接收用户输入时,也要注意格式的正确性,如上述代码通过
scanf
的返回值判断输入格式是否正确。