1

这是代码:

#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); 与它的下一行(现在注释),结果将是相同的,这是为什么呢?

4

3 回答 3

3

当然,int c = (*ptrtest.addptr)(3,4);是基本情况。但是,在 C++ 中(以及在 C 中),如果您()在函数指针上使用 call ( ) 运算符,它将自动执行“取消引用”。就像赋值给函数指针类型的变量一样,函数名衰减成函数指针,即

int (*fptr)() = some_func;

int (*fptr)() = &some_func;

尽管类型funcint ()(void).

于 2013-06-12T13:21:22.007 回答
1

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

于 2013-06-12T13:18:04.183 回答
0

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

于 2013-06-12T13:18:15.383 回答