c++中带函数指针的函数调用
function call with function pointer in c++
代码:
#include<iostream>
using namespace std;
typedef struct ptrs
{
int (*addptr)(int a, int b);
}mems;
int add(int a, int b)
{
int result = a+b;
return result;
}
int main()
{
mems ptrtest;
ptrtest.addptr = &add;
int c = (*ptrtest.addptr)(3,4);
//int c = ptrtest.addptr(3,4);
cout << c << endl;
return 0;
}
如果我替换代码int c = (*ptrtest.addptr)(3,4);与它的下一行(现在注释),结果将是相同的,为什么?
当然,int c = (*ptrtest.addptr)(3,4);
是基准情况。然而,在c++(以及C)中,如果您在函数指针上使用call (()
)操作符,它将自动执行"解引用"。就像赋值给函数指针类型的变量一样,函数名也会衰变成函数指针,即
int (*fptr)() = some_func;
和
一样有效int (*fptr)() = &some_func;
尽管 func
的类型为int ()(void)
函数和函数指针可以互换使用,可能是为了方便。特别是,c++ 11标准的第5.2.2节规定,函数调用可以使用函数或指向函数的指针。
c++将自动将函数名转换为函数指针(反之亦然),如果这样做将创建正确的语法。
相关文章:
- 使用共享指针的函数调用,其对象应为 const
- 返回指向对象的指针的函数调用是否为 prvalue?
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- 在结构外部调用指向函数的指针
- VkSurfaceKHR 指针的值在函数调用后更改,无需任何显式赋值
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 指针在函数调用后更改其地址
- 努力将指向成员函数的指针绑定到类模板的T成员,然后在槽中调用
- 对std::函数对象的调用不匹配,该对象是指向成员函数的指针
- C++:这是使用整数变量作为函数调用指针的正确方法吗
- 正确的方法是什么?调用指针到指针到指针内部的函数?
- 参数的混合值,当我调用指针成员函数时
- 使用函数指针时,ESP 未在函数调用中正确保存
- 为什么使用指向函数的指针调用虚函数时不需要指针"this"?
- 函数调用歧义(用户定义的转换和 Derived2Base 指针转换)
- 创建指针时是否没有构造函数调用
- 调用指向成员函数的指针时出错
- 这些函数调用的返回指针的区别是什么?
- 如何通过指向返回另一个函数的函数的指针调用具有默认参数的函数
- 为什么我不能在插入的函数调用中直接使用返回的指针作为参数