用指针调用函数的不同形式
Ma Jia nan
2006-1-16
最初一个函数指针必须用*操作符(和一对括号)“转换为”一个“真正的”函数才能调用,如下所示:
int r, func(), (*pf)() = func; //函数指针的初始化
r = (*pf)(); //函数的指针调用形式1,等价于 r = func();
函数总是通过指针进行调用的,所有“真正的”函数名总是隐式的退化为指向该函数的指针,正如在对函数指针pf初始化做的那样:
int func();
int (*pf)() = func;
这有点类似数组名的行为(不带下标操作符的数组名会被解释成指向数组首元素的指针)。
以上结论表明,下面的语句也是正确的。
r = pf(); //函数的指针调用形式2
ANSI C 标准实际上接受形式2,这意味着不再需要*操作符,但形式1依然允许。两种形式产生相同的结果,但是形式1让读者更清楚该调用是通过函数指针执行的。