如何使用函数指针执行算术运算?

时间:2015-09-04 04:52:55

标签: c math function-pointers arithmetic-expressions

所以..我明白,如果我把(*ptr)作为函数f,那么

res = (*ptr)(a,b) is the same as res = f(a,b). 

所以现在我的问题是我必须读入3个整数。前2个是操作数,第三个是操作符,例如1 = add, 2 = subtract, 3 = multiply, 4 = divide。如果没有if或switch语句,我该怎么办呢。

我在考虑两种可能的解决方案

  
      
  1. 创建4个指针并将每个指针都指向算术运算,但是我还是要做某种输入   需要if或switch语句的验证

  2.   
  3. 这不是一个真正的解决方案,但基本的想法可能就是这样。如果c =运算符,那么我可以以某种方式执行res =   (* ptrc)(a,b)但我不认为有这样的语法C

  4.   

示例输入

1 2 1

1 2 2

1 2 3

1 2 4

示例输出

 3

-1

 2

 0 

我的代码:

#include <stdio.h>

//Datatype Declarations
typedef int (*arithFuncPtr)(int, int);


//Function Prototypes
int add(int x, int y);


int main()
{
    int a, b, optype, res;

    arithFuncPtr ptr;

    //ptr points to the function add
    ptr = add;

    scanf("%i %i", &a, &b);

    res = (*ptr)(a, b);

    printf("%i\n", res);

    return 0;
}

int add(int x, int y)
{
    return x+y;
}

1 个答案:

答案 0 :(得分:4)

您可以将函数指针放在数组中。

#include <stdio.h>

//Datatype Declarations
typedef int (*arithFuncPtr)(int, int);


//Function Prototypes
int add(int x, int y);
int sub(int x, int y);
int mul(int x, int y);
int div(int x, int y);

int main()
{
    int a, b, optype, res;

    arithFuncPtr ptr[4];

    //ptr points to the function
    ptr[0] = add;
    ptr[1] = sub;
    ptr[2] = mul;
    ptr[3] = div;

    scanf("%i %i %i", &a, &b, &optype);

    res = (ptr[optype - 1])(a, b);

    printf("%i\n", res);

    return 0;
}

int add(int x, int y)
{
    return x+y;
}  

int sub(int x, int y)
{
    return x-y;
}  

int mul(int x, int y)
{
    return x*y;
}  

int div(int x, int y)
{
    return x/y;
}