c++中带函数指针的函数调用

function call with function pointer in c++

本文关键字:函数调用 指针 函数 c++      更新时间:2023-10-16

代码:

#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++将自动将函数名转换为函数指针(反之亦然),如果这样做将创建正确的语法。