指向C++中函数的指针,(*pf)()和pf相同吗

pointer to the function in C++,are (*pf)() and pf same?

本文关键字:pf C++ 指针 指向 函数      更新时间:2023-10-16

我是C++的初学者,在理解函数指针时遇到了问题:

main()
{
double pam(int);
double (*pf)(int);
pf = pam;            
double x = pam(4);    
double y = (*pf)(5); 
double y = pf(5);
} 

(*pf)()pf()怎么可能相同,其中pf是指向函数的指针?

其他指针和指向函数的指针之间有什么区别??

如果pf是指向函数的指针,*pf((和pf((怎么会相同?

它们不一样(因为运算符的优先级(。如果你的意思是(*pf)()pf()实际上是一样的,那是因为语言的规则是这样说的

[expr.call]

函数调用是一个后缀表达式,后面跟着括号,括号中可能包含一个空的、逗号分隔的初始值设定项子句列表,这些子句构成了函数的参数。后缀表达式应具有函数类型或函数指针类型。对于非成员函数或静态成员函数的调用,后缀表达式应该是引用函数的左值(在这种情况下,函数到指针的标准转换([conv.func](在后缀表达式上被抑制(,或者具有函数指针类型。

(*pf)()的情况下,表达式(*pf)是指函数的左值,而在pf()的情况下表达式pf具有函数指针类型。在这两种情况下,都会调用pf所指向的函数。

其他指针和指向函数的指针之间有什么区别??

主要区别在于函数指针指向函数,而指向对象的指针指向对象。