我如何解释复杂的声明,如:
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]; 这可以解释如下:
- 从变量名-------------------------- fp1开始
- 没有什么是正确的但是)所以去左边找*--------------是一个指针
- 跳出括号并遇到(int)---------到一个以int作为参数的函数
- 向左走,找到*----------------------------------------并返回一个指针
- 跳转括号,向右然后按[10] --------到10的数组
- 左转查找*-----------------------------------------指向
- 再向左走,找到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是一个在后端使用此命令行工具的网站.
我很久以前就学会了以下方法:
从类型标识符(或内括号)开始,然后沿着螺旋线移动,首先将元素放在右边
的情况下
int * (* (*fp1) (int) ) [10];
Run Code Online (Sandbox Code Playgroud)
你可以说:
导致:
fp1是一个指向函数的指针,该函数接受一个int并返回一个指向10个指向int的数组的指针
绘制实际螺旋(至少在你的脑海中)有很大帮助.