函数指针如何工作?

时间:2012-04-12 19:03:27

标签: c

我在这里问了一个关于函数指针使用的问题,有人回答了经典计算器的例子

float Plus    (float a, float b) { return a+b; }
float Minus   (float a, float b) { return a-b; }
float Multiply(float a, float b) { return a*b; }
float Divide  (float a, float b) { return a/b; }

in some way you select your operation

 /* Here there should be an if or a switch/case that selects the right operation */
 float (*ptrFunc)(float, float) = Plus;  

现在他说“这里应该有一个if或者一个开关/案例选择正确的操作”

并且已多次读取函数指针可用于替换if或switch / case语句但不能理解(即使在此计算器示例中)函数指针如何替换if或switch / case?

任何人都可以帮助我如何可视化替换if或switch / case的函数指针。

3 个答案:

答案 0 :(得分:5)

如果您需要多次调用计算器功能,那么您只需要决定调用哪个函数,然后根据需要多次调用它。

if (something) {
    ptrFunc = Plus;
} else {
    ptrFunc = Minus;
}

c = ptrFunc(a, b);
z = ptrFunc(x, y);

答案 1 :(得分:4)

他不希望你替换它,他希望你写一个来选择正确的操作:

float (*ptrFunc)(float, float);
switch (something)
{ 
  case 1: 
    ptrFunc = Plus;
    break;

     .
     .
     .
}

答案 2 :(得分:2)

考虑这样的事情:

typedef float (*op)(float a, float b);

typedef struct { 
   char name;
   op implementation;
} operation;

operation ops[] = {
    { '+', Plus},
    { '-', Minus},
    { '*', Multiply},
    { '/', Divide}
};

当您阅读输入时,您会发现ops[n].name与您从输入中获得的运算符相匹配,并调用ops[n].implementation