6

我正在使用以下简单代码重新访问 C 中的函数指针:

unsigned TestFn(unsigned arg)
{   
    return arg+7;
}

unsigned Caller(unsigned (*FuncPtr)(unsigned), unsigned arg)
{
    return (*FuncPtr)(arg);
}

我用它来调用它

Caller(TestFn, 7)  //and
Caller(&TestFn, 7)

两者都给出了相同的输出: 14. 这是什么解释。我之前一直在使用第二种调用方式。

4

2 回答 2

8

函数在这里工作有点像数组。假设你有:

char hello[5];

您可以直接将此变量的地址引用为hello- 变量名称“衰减”为指针 - 或 as &hello,它显式获取地址。

函数是一样的:如果你把TestFn它写成函数指针。但你也可以使用&TestFn. 后一种形式可能更好,因为它为更多人所熟悉。

于 2013-03-26T17:08:20.520 回答
2

就像您在不使用 & 符号的情况下传递字符串的地址一样'&',您不需要使用 & 符号来表示您正在传递一个function pointer. 您可以通过 K&R 搜索该书。它包含一个很好的解释

于 2013-03-26T17:08:56.580 回答