MST

星途 面试题库

面试题:C语言指针:函数指针数组的应用

编写一个程序,定义一个函数指针数组,数组中的每个元素指向一个函数,这些函数都接收两个 `int` 类型参数并返回一个 `int` 类型结果。这些函数分别实现加法、减法、乘法和除法运算。程序需要接收用户输入的两个数字以及一个操作符('+', '-', '*', '/'),然后根据操作符调用相应的函数进行计算并输出结果。请重点说明函数指针数组的声明、初始化以及调用过程中的注意事项。
29.6万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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;
}

函数指针数组声明、初始化及调用注意事项

  1. 声明
    • 声明函数指针数组时,int (*funcPtrArray[4])(int, int) 这种形式表示 funcPtrArray 是一个数组,数组有4个元素,每个元素是一个函数指针,该函数指针指向的函数接收两个 int 类型参数并返回一个 int 类型结果。
  2. 初始化
    • 在初始化函数指针数组时,直接将函数名赋值给数组元素。因为函数名在表达式中会被转换为函数指针,例如 funcPtrArray[0] = add; 这里 add 会被自动转换为指向 add 函数的指针。
    • 初始化顺序要与后续使用的逻辑相对应,例如上面代码中,加法函数 add 对应数组下标0,减法函数 subtract 对应下标1等,这样在 switch 语句中根据操作符调用时才能正确对应。
  3. 调用
    • 在调用函数指针数组中的函数时,使用 funcPtrArray[index](arg1, arg2) 的形式,这里 index 是数组下标,arg1arg2 是函数所需的参数。
    • 要注意函数本身的逻辑,例如除法函数要处理除数为0的情况,在上述代码中,当除数为0时,程序会输出错误信息并退出。同时在接收用户输入时,也要注意格式的正确性,如上述代码通过 scanf 的返回值判断输入格式是否正确。