相关疑难解决方法(0)

我如何理解复杂的函数声明?

我如何理解以下复杂的声明?

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 pointers declaration

32
推荐指数
5
解决办法
5696
查看次数

螺旋规则和'声明跟随用法'用于解析C和C++声明

这个问题遵循关于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)

c c++ declaration

17
推荐指数
1
解决办法
3638
查看次数

标签 统计

c ×2

declaration ×2

c++ ×1

pointers ×1