为什么指针函数*pFcn
没有指向地址?它指向Add
,而不是&Add
。也不会返回地址。这是为什么?
int Add(int nX, int nY)
{
return nX + nY;
}
int main()
{
// Create a function pointer and make it point to the Add function
int (*pFcn)(int, int) = Add;
cout << pFcn(5, 3) << endl; // add 5 + 3
return 0;
}
答案 0 :(得分:4)
如果foo
是一个函数,那么(除了某些特定情况*)foo
和&foo
都表示一个指向函数的指针:函数立即衰减到指向自己的指针,所以foo(x)
,(*foo)(x)
和(**foo)(x)
都是一样的。
当给出选择时,更喜欢通过引用而不是通过值传递函数:
template <typename R, typename ...Args> R invoke(R (*f)(Args...), Args... args)
{
return f(args...);
// bad: "&f" is not useful
}
invoke_p(add, 1, 2);
template <typename R, typename ...Args> R invoke_r(R (&f)(Args...), Args... args)
{
return f(args...);
// good: "&f" is the expected function pointer
}
invoke_r(add, 1, 2);
*)例如,sizeof(foo)
和sizeof(&foo)
不一样;前者不合法。
答案 1 :(得分:0)
printf("%p\t%p",pFcn,Add)
pFcn给出它指向的函数的地址,在这种情况下是函数Add的地址。 pFcn(1,2)调用该函数。