将函数指针作为参数传递

时间:2013-03-26 17:00:01

标签: c function function-pointers

我正在使用以下简单代码重新访问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。这是什么解释。我之前一直在使用第二种方式。

2 个答案:

答案 0 :(得分:6)

函数在这里工作类似于数组。假设你有:

char hello[5];

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

函数是相同的:如果你写TestFn它会衰减成函数指针。但您也可以使用&TestFn。后一种形式可能更好,因为它对更多人来说很熟悉。

答案 1 :(得分:2)

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