0

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

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 或一个 switch/case 来选择正确的操作”

并且已经阅读了很多次函数指针可以用来替换 if 或 switch/case 语句,但无法理解(即使在这个计算器示例中)函数指针如何替换 if 或 switch/case?

谁能帮助我如何可视化函数指针替换 if 或 switch/case。

4

3 回答 3

5

如果你需要多次调用计算器函数,那么你只需要决定调用哪个函数一次,然后根据需要调用多少次。

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

c = ptrFunc(a, b);
z = ptrFunc(x, y);
于 2012-04-12T19:05:31.300 回答
4

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

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

     .
     .
     .
}
于 2012-04-12T19:05:57.980 回答
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.

于 2012-04-12T19:07:56.543 回答