这两个表达有什么区别

ini*_*nit 6 c++

#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;
}
Run Code Online (Sandbox Code Playgroud)

test是一个函数指针,不是吗?(*b)()是正确的形式,因为它相当于函数原型。但为什么删除一个符号是正确的呢*?他们都产生了正确的结果。

eer*_*ika 7

test是一个函数指针,不是吗?

不,不是。test是一个函数。

b是一个指向函数的指针。

但为什么删除符号*是正确的呢?

因为您还可以在函数指针上调用函数调用运算符,而不仅仅是函数。

此外,由于函数可以隐式转换为函数指针,因此这也是等效的:

(********b)();
Run Code Online (Sandbox Code Playgroud)

这两个表达有什么区别

一种是通过函数指针间接调用函数调用运算符 - 它调用指向的函数。

另一个在函数指针上调用函数调用运算符 - 它隐式间接通过指针并调用指向的函数。

前者需要多写3个字符。