这实际上会指定返回值的函数调用goo()到pfoo,这并不是我们想要的。我们希望pfoo被分配到功能良好,没有从goo()返回值。所以没有圆括号是必需的。
请注意,签名(参数和返回值的函数指针必须)函数的签名匹配。这里是一个例子:
1
2
3
4
5
6
7
8
9
10
11
// function prototypes
int foo();
double goo();
int hoo(int nX);
// function pointer assignments
int (*pFcn1)() = foo; // okay
int (*pFcn2)() = goo; // wrong -- return types don't match!
double (*pFcn3)() = goo; // okay
pFcn1 = hoo; // wrong -- pFcn1 has no parameters, but hoo() does
int (*pFcn3)(int) = hoo; // okay
调用一个函数使用一个函数指针
你可以用一个函数指针的第二件事是用它来调用函数。有两种方法来做这个。首先是通过显式解引用:
1
2
3
4
5
6
7
int foo(int nX)
{
}
int (*pFoo)(int) = foo; // assign pFoo to foo()
(*pFoo)(nValue); // call function foo(nValue) through pFoo.