传递函数指针作为参数
我用下面简单的代码重新审视函数指针在C:使用传递函数指针作为参数
Caller(TestFn, 7) //and
Caller(&TestFn, 7)
两个
unsigned TestFn(unsigned arg)
{
return arg+7;
}
unsigned Caller(unsigned (*FuncPtr)(unsigned), unsigned arg)
{
return (*FuncPtr)(arg);
}
我把它叫做给出了相同的输出结果:14有什么解释这个的。我之前一直在使用第二种调用方式。
函数在这里工作类似于数组。假设你有:
char hello[5];
您可以参考这个变量的地址直接作为hello
- 变量名“衰变”成一个指针 - 或者&hello
,其中明确取得地址。
功能是一样的:如果你写TestFn
它衰变成一个函数指针。但是你也可以使用&TestFn
。后一种形式可能会更好,因为它对更多人来说很熟悉。
Thnx,正如你在数组中hello和hello相同的情况下所说的那样,我尝试过使用func ptrs,并且看到它们是:&ptr,ptr,* ptr,** ptr,****。 * ptr都一样。这与取消引用将赋予元素值的数组显得有点不同。 – CuriousSid 2013-03-26 17:22:10
是的,它有点不同:当你取消引用函数指针时,你得到一个函数,用它的地址表示。但地址也是指针的值。所以如果p是一个函数指针,p == * p == ** p == ... – Joni 2013-03-26 18:24:01
就像您传递字符串的地址而不使用&符号'&'
符号一样,您不需要使用&字符来表示您传递的是function pointer
。您可以通过K & R搜索该书。它包含了一个很好的解释
我相信地址是通过TestFn时隐式传递的,所以它的解释实际上与&TestFn相同。 – Martinsos 2013-03-26 17:03:00
我认为这个问题可以回答它,即使它是C++ http://*.com/questions/6893285/why-do-all-these-crazy-function-pointer-definitions-all-work-what-is-really- goi – Joe 2013-03-26 17:03:00