我在这里问了一个关于函数指针使用的问题,有人回答了经典计算器的例子
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的函数指针。
答案 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
。