很难为我的问题命名一个标题,所以请原谅我这个模棱两可的标题。
函数名称被视为函数的地址,因此我们可以将它们分配给函数指针。
...
void fun(){cout<<"fun called";}
int main()
{
typedef void (*pf)();
pf p1 = fun;
//Then we can call p1()
p1();
...
}
这没问题。让我感到困惑的是,pf p2 = &fun; p2();
它将做与p1完全相同的事情,而不会发出警告或错误。
“ fun”是函数的地址,所以&fun不应该是该函数的地址的地址吗?我认为,当我将&fun分配给p2时,应该存在类型不一致的情况。为什么pf p2 = &fun
要进行法律转让?
函数名称被视为函数的地址
“ fun”是函数的地址
这些陈述都不正确。函数名称不是指针,而是函数指示符。仅在某些情况下(例如,当分配给指针类型为-的对象时),它类似于数组在隐式转换为指针(“衰减为指针”)的情况(并非数组全部)函数或调用时。
当函数是一元(地址)运算符的参数时,不会发生这种隐式转换&
,因此&function_name
将是“函数指针”而不是“函数指针”。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句