我如何理解以下复杂的声明?
char (*(*f())[])();
char (*(*X[3])())[5];
void (*f)(int,void (*)());
char far *far *ptr;
typedef void (*pfun)(int,float);
int **(*f)(int**,int**(*)(int **,int **));
Run Code Online (Sandbox Code Playgroud) 这个问题遵循关于C声明的另一个问题.阅读这个问题的答案,我读到了螺旋规则,我也理解了"声明遵循用法"的含义.
好到目前为止.但后来我读到了这个宣言:
char *(*(*a[N])())();
Run Code Online (Sandbox Code Playgroud)
我想知道如何用"声明跟随用法""规则"来解析它.特别是对于阵列部分.
我读到的是:
(*(*a[N])())
Run Code Online (Sandbox Code Playgroud)
是一个()返回a 的函数char *,然后解除引用以下内容
(*a[N])() // 1
Run Code Online (Sandbox Code Playgroud)
这是'函数返回char*',所以1是'返回函数的指针char *'然后我会说'何时(*a[N])被调用,它是[先前的声明]'.此时我们有(*a[N])一个返回指向返回函数的指针的函数char *.
但后来我不知道如何应用这个规则来区分"指向数组的指针"和"指针数组".
有人可以澄清一下吗?
其他问题:这些声明中的"优先级"规则是什么,&(在C++中)*,和[]?[也许"优先"不是正确的术语]
为了检查我是否正确理解了'螺旋规则',我也在下面解析这个表达式; 请告诉我,如果我错了.
+-----------+
| +------+ |
| | +-+ | |
| | ^ | | |
char* (*(* a[N])())();
^ ^ ^ ^ ^ ^
| | | | | |
| | +---+ …Run Code Online (Sandbox Code Playgroud)