C语言函数指针数组,GCC编译问题

发布时间 2023-05-04 17:01:19作者: sophomore

使用C语言函数指针数组实现简单的计算器,代码如下

#include <stdio.h>
#include <stdlib.h>

double add(double a, double b) {
    return (a + b);
};
double sub(double a, double b) {
    return (a - b);
};
double mul(double a, double b) {
    return (a * b);
};
double divd(double a, double b) {
    return (a / b);
};

int main(void) {
    double (*p[4])(double, double) = {add, sub, mul, divd};
    printf("Please add, sub, mul, div:\n");
    char s[3];
    scanf("%s", s);
    int operator = 0;
    double a, b;
    switch (s[0])
    {
    case 'a':
        operator = 0;
        break;
    case 's':
        operator = 1;
        break;
    case 'm':
        operator = 2;
        break;
    case 'd':
        operator = 3;
        break;
    default:
        break;
    }
    printf("%d\n", operator);
    printf("Please input two number:\n");
    scanf("%lf %lf", &a, &b);
    double result = p[operator](a, b);
    printf("%lf + %lf = %lf\n", a, b, result);
    exit(0);
}

输入输出如下

Please add, sub, mul, div:
add
0
Please input two number:
1 5
1.000000 + 5.000000 = 1.000000

修改后代码

#include <stdio.h>
#include <stdlib.h>

double add(double a, double b) {
    return (a + b);
};
double sub(double a, double b) {
    return (a - b);
};
double mul(double a, double b) {
    return (a * b);
};
double divd(double a, double b) {
    return (a / b);
};
double (*p[4])(double, double) = {add, sub, mul, divd};
int main(void) {
    
    printf("Please add, sub, mul, div:\n");
    char s[3];
    scanf("%s", s);
    int operator = 0;
    double a, b;
    switch (s[0])
    {
    case 'a':
        operator = 0;
        break;
    case 's':
        operator = 1;
        break;
    case 'm':
        operator = 2;
        break;
    case 'd':
        operator = 3;
        break;
    default:
        break;
    }
    printf("%d\n", operator);
    printf("Please input two number:\n");
    scanf("%lf %lf", &a, &b);
    double result = p[operator](a, b);
    printf("%lf + %lf = %lf\n", a, b, result);
    exit(0);
}

将函数指针数组的定义放在了main函数的外面

输入输出如下

Please add, sub, mul, div:
add
0
Please input two number:
4 5
4.000000 + 5.000000 = 9.000000

GCC版本gcc (Debian 12.2.0-14) 12.2.0