让我们说,例如,我有一个名为 int compute(int x1,int x2,int(* op)(int,int))的函数,它将函数指针作为参数一个做一些算术运算的函数
int add (int a1, int a2)
{
return (a1 + a2);
}
int mul (int s1, int s2)
{
return (s1 * s2);
}
int compute (int x1, int x2, int (* op) (int, int) )
{
return ( op (x1, x2) );
}
main()
{
int result;
int op1, op2;
op1 = 4;
op2 = 5;
result = compute (op1, op2, &add());
result = compute (op1, op2, &mul());
}
而不是所有这个函数指针的东西,我也可以使用flags作为参数而不是函数指针来实现相同的。
int compute (int x1, int x2, int opFlag)
{
if ( opFlag == 1 )
return ( add (x1, x2); );
if ( opFlag == 2)
return ( mul (x1, x2); );
return 1;
}
main()
{
int result;
int op1, int op2;
op1 = 4;
op2 = 5;
result = compute (op1, op2, 1);
result = compute (op1, op2, 2);
}
现在的问题是,在效率,代码方面,“功能指针”方法与“简单标记方法”的(ad / disad)优势是什么?尺寸,便携性,可读性等,?
答案 0 :(得分:1)
在效率方面,“功能指针”方法与“简单标志方法”的(ad / disad)优势是什么,
更少的通话可能会更快。在许多CPU上,当您执行大量操作时,函数调用会产生显着的成本。
代码大小,
由于没有函数prolog和epilog代码的重复开销,因此较少的函数可能会更小。
便携性,
只要您的代码正确,不会受到未定义的行为影响并且不依赖于实现定义/特定行为,则不适用。
可读性
可能是主观的。通常情况下,抽象层次更少,间接更少,更容易理解。
等,?
定义etc
。
答案 1 :(得分:0)
当你想要添加新操作时呢?
函数指针允许您(或您的库未来客户)在不更改计算功能的情况下执行此操作