【发布时间】:2021-11-15 07:37:30
【问题描述】:
#include <bits/stdc++.h>
using namespace std;
void test(){
int a = 100;
cout << a << endl;
}
int main()
{
void(*b)() = test;
(*b)(); //expression one
b(); //expression two
return 0;
}
test 是一个指向函数的指针,不是吗? (*b)() 是正确的形式,因为它等价于函数原型。但是为什么删除符号* 是正确的呢?他们都产生了正确的结果。
【问题讨论】:
-
“
test是指向函数的指针”?不会,但它会衰减指向函数的指针(即&test)。变量b是一个指向(非成员)函数的指针。 -
(**********b)();也是正确的。这是一个继承自 C 的悖论,是由于获取函数地址和取消引用指针的工作原理。
标签: c++