复杂的声明

Pra*_*rav 13 c declaration

我如何解释复杂的声明,如:

int * (* (*fp1) (int) ) [10]; ---> declaration 1
int *( *( *[5])())(); --------> declaration 2
Run Code Online (Sandbox Code Playgroud)

是否有任何规则应该遵循以理解上述声明?

mat*_*ekm 18

这是一篇关于如何在C中阅读复杂声明的好文章:http://www.codeproject.com/KB/cpp/complex_declarations.aspx

这对我帮助很大!

特别是 - 您应该阅读"正确的规则"部分.这里引用:

int*(*(*fp1)(int))[10]; 这可以解释如下:

  1. 从变量名-------------------------- fp1开始
  2. 没有什么是正确的但是)所以去左边找*--------------是一个指针
  3. 跳出括号并遇到(int)---------到一个以int作为参数的函数
  4. 向左走,找到*----------------------------------------并返回一个指针
  5. 跳转括号,向右然后按[10] --------到10的数组
  6. 左转查找*-----------------------------------------指向
  7. 再向左走,找到int -------------------------------- ints.


Ale*_*x B 17

你可以使用:cdecl*

cdecl> explain int *( *( *a[5])())();
 declare a as array 5 of pointer to function
 returning pointer to function returning pointer to int
cdecl> explain int * (* (*fp1) (int) ) [10];
 declare fp1 as pointer to function (int) returning
 pointer to array 10 of pointer to int
Run Code Online (Sandbox Code Playgroud)

*Linked是一个在后端使用此命令行工具的网站.


Rem*_*o.D 7

我很久以前就学会了以下方法:

从类型标识符(或内括号)开始,然后沿着螺旋线移动,首先将元素放在右边

的情况下

 int * (* (*fp1) (int) ) [10];
Run Code Online (Sandbox Code Playgroud)

你可以说:

  • fp1是一个(右边没有任何东西所以向左移动)
  • 指向(移出内括号
  • 以int为标记的函数(右边第1个)
  • 并返回一个指针(从括号中退出)
  • 一个由10个元素组成的数组
  • 指针(右边没有任何东西)
  • INT

导致:

fp1是一个指向函数的指针,该函数接受一个int并返回一个指向10个指向int的数组的指针

绘制实际螺旋(至少在你的脑海中)有很大帮助.