这是三个功能,例如:-
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; }
现在有一个函数将指向函数的指针作为参数之一:-
void Function_Pointer_func(float a, float b, float (*pt2Func)(float, float))
{
float result = pt2Func(a, b); // call using function pointer
cout << " Result = "; // display result
cout << result << endl;
}
并调用上面的函数“Function_Pointer_func”函数写在下面
void Replace()
{
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ Plus);//// (1)
Function_Pointer_func(2, 5, /* pointer to function 'Minus' */ &Minus);//// (2)
}
为什么上述函数可以正常工作,因为函数“Function_Pointer_func”将函数指针作为参数。如果我们在行中替换 RHS
float result = pt2Func(a, b); // call using function pointer
(*pt2Func)(a, b) 的函数“Function_Pointer_func”;然后它也可以工作,但对于 (&pt2Func)(a, b);
它在VS2008中给出了一个错误:
“错误 C2064:术语不计算为采用 2 个参数的函数”
现在将函数“Function_Pointer_func”中“float (*pt2Func)(float, float)”的参数替换为float (pt2Func)(float, float),然后全部三个
float result = pt2Func(a, b); //
float result = (&pt2Func)(a, b); //
float result = (*pt2Func)(a, b); //
声明有效,为什么?我希望我不舒服的原因在于理解函数指针的核心理解。好吧,我不是在介绍 Q 吗?没有大量阅读,但是是的,我没有对此进行任何深入的研究,所以请随时推荐一些这方面的阅读,这将解决我的歧义。
我在这里先向您的帮助表示感谢。