#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)()是正确的形式,因为它相当于函数原型。但为什么删除一个符号是正确的呢*?他们都产生了正确的结果。
test是一个函数指针,不是吗?
不,不是。test是一个函数。
b是一个指向函数的指针。
但为什么删除符号*是正确的呢?
因为您还可以在函数指针上调用函数调用运算符,而不仅仅是函数。
此外,由于函数可以隐式转换为函数指针,因此这也是等效的:
(********b)();
Run Code Online (Sandbox Code Playgroud)
这两个表达有什么区别
一种是通过函数指针间接调用函数调用运算符 - 它调用指向的函数。
另一个在函数指针上调用函数调用运算符 - 它隐式间接通过指针并调用指向的函数。
前者需要多写3个字符。
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |