c++ - 这个声明是什么意思 "int(*ptr[3])();"?

标签 c++ c syntax declaration

完整代码:

#include<stdio.h>    
 aaa(){ 
    printf("hi");  
 }  
 bbb(){  
    printf("hello");  
 }  
 ccc(){ 
    printf("ccc");  
 }  
int main(){  
     int(*ptr[3])(); 
     ptr[0]=aaa;  
     ptr[1]=bbb;  
     ptr[3]=ccc;   
     ptr[3]();   
}   

输出将是“再见”。
从代码中我可以看出,int(*ptr[3])() 是某种与 int 相关的数组声明,它也看起来像函数调用。 下面几行代码将函数名赋值给数组,数组中的一 block 可以用于函数调用。 有人可以解释一下声明是什么以及函数调用是如何进行的吗?

最佳答案

当你遇到这样的类型时,你可以使用cdecl工具来解码它:

$ cdecl explain "int (*p[3])()"
declare p as array 3 of pointer to function returning int
$

注意 ptr 是 cdecl 的保留字,您只需将变量重命名为更基本的名称...

------编辑------

请注意,空参数列表在 C 或 C++ 中并不意味着相同。在 C 中,这意味着具有未知数量参数的函数(没有参数的 C 函数必须声明为 f(void))。在 C++ 中,这意味着一个没有参数的函数。

关于c++ - 这个声明是什么意思 "int(*ptr[3])();"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41520438/

相关文章:

c++ - 在 C++ 中放置派生的新基子对象

c - 如何将二进制 argv 转换为字符串?

c - 我是否必须使用 C99 在每个 .c 文件上声明 "extern inline"?

c - 在 Linux 中无限期休眠一个线程

c++ - using 语句可以出现在构造函数初始化列表中吗?

C++ 通过引用传递单个元素数组 - 这是事实吗?

c++ - 如何从 C++ 容器中获取随机元素?

(++variable) 和 (variable++) 之间的 C 区别

bash - osascript使用带空格的bash变量

c++ - 为什么在应该返回对象的方法中返回 int 有效?