首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c++中带有函数指针的函数调用

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

Stack Overflow用户
提问于 2013-06-12 13:14:22
回答 3查看 80关注 0票数 1

下面是代码:

代码语言:javascript
复制
#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);替换为它的下一行(现在注释),结果将是相同的,为什么呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-12 13:21:22

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

代码语言:javascript
复制
int (*fptr)() = some_func;

也同样有效

代码语言:javascript
复制
int (*fptr)() = &some_func;

,尽管是func的类型是int ()(void)

票数 3
EN

Stack Overflow用户

发布于 2013-06-12 13:18:04

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

票数 1
EN

Stack Overflow用户

发布于 2013-06-12 13:18:15

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17066518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档