指向c ++中的函数

ric*_*d.g 2 c++ pointers function

为我的问题命名标题有点难,所以请原谅我这个含糊不清的标题.

函数名称被视为函数的地址,因此我们可以将它们分配给函数指针.

...
void fun(){cout<<"fun called";}  
int main()
{
typedef void (*pf)();
pf p1 = fun;
//Then we can call p1()
p1();
...
}
Run Code Online (Sandbox Code Playgroud)

这没问题.让我感到困惑的是,pf p2 = &fun; p2();它将与p1完全相同,没有任何警告或错误.

"fun"是函数的地址,所以不应该有趣的是函数地址的地址吗?当我为p2分配和乐趣时,我认为应该存在类型不一致.为什么pf p2 = &fun是法律任务?

Ker*_* SB 6

没有.

除了在某些情况下,由函数名称形成的id表达式衰减到函数指针.其中一种情况是它是address-of运算符的操作数.在这种情况下,它不会衰减,并且在函数名称上计算运算符地址的结果是函数的地址.


小智 5

函数名称被视为函数的地址

"fun"是函数的地址

这些陈述都不正确.函数名称不是指针而是函数指示符; 只有这样的情况 - 类似于数组 - 在某些但不是所有的上下文中隐式转换为指针("衰减成指针"),例如,当分配给指针类型的对象时功能或被叫时.

当函数是一元(地址)运算符的参数时,不会发生这种隐式转换&,因此&function_name它将是"指向函数的指针"类型,而不是"指向函数的指针".