例如,我有一个名为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());
}
除了所有这些函数指针的东西,我还可以使用标志作为参数而不是函数指针来实现相同的目的。
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)优势是什么?