我正在使用以下简单代码重新访问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。这是什么解释。我之前一直在使用第二种方式。
答案 0 :(得分:6)
函数在这里工作类似于数组。假设你有:
char hello[5];
您可以直接将此变量的地址称为hello
- 变量名称“衰减”为指针 - 或&hello
,它明确获取地址。
函数是相同的:如果你写TestFn
它会衰减成函数指针。但您也可以使用&TestFn
。后一种形式可能更好,因为它对更多人来说很熟悉。
答案 1 :(得分:2)
就像你在不使用符号'&'
符号的情况下传递字符串的地址一样,您不需要使用&符号来表示您正在传递function pointer
。你可以通过K& K搜索这本书。 R.它包含了很好的解释