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

时间:2013-06-12 13:14:22

标签: c++ function-pointers

以下是代码:

#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); ,结果将是相同的,为什么呢?

3 个答案:

答案 0 :(得分:3)

当然,int c = (*ptrtest.addptr)(3,4);是基本情况。但是,在C ++中(以及在C中),如果在函数指针上使用调用(())运算符,它将自动执行“解除引用”。就像分配给函数指针类型的变量一样,函数的名称会衰减为函数指针i。即

int (*fptr)() = some_func;

一样有效
int (*fptr)() = &some_func;

虽然 func的类型为int ()(void)

答案 1 :(得分:1)

函数和函数指针可以互换使用,大概是为了方便起见。特别是,C ++ 11标准的5.2.2节规定了函数调用可以使用函数或函数指针进行。

答案 2 :(得分:0)

如果这样做会产生正确的语法,C ++会自动将函数名转换为函数指针(反之亦然)。