下面是代码:
#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);替换为它的下一行(现在注释),结果将是相同的,为什么呢?
发布于 2013-06-12 13:21:22
当然,int c = (*ptrtest.addptr)(3,4);是基本情况。但是,在C++ (以及C语言中)中,如果在函数指针上使用call (())运算符,它将自动执行“取消引用”。就像分配给函数指针类型的变量一样,函数的名称会退化为函数指针,即函数指针。
int (*fptr)() = some_func;也同样有效
int (*fptr)() = &some_func;,尽管是,func的类型是int ()(void)。
发布于 2013-06-12 13:18:04
函数和函数指针可以互换使用,大概是为了方便。特别是,C++11标准的5.2.2节指定可以使用函数或指向函数的指针进行函数调用。
发布于 2013-06-12 13:18:15
如果这样做将创建正确的语法,C++将自动将函数名转换为函数指针(反之亦然)。
https://stackoverflow.com/questions/17066518
复制相似问题