gpt4 book ai didi

c - 声明 "char (* ( *f())[])();"是什么意思?

转载 作者:太空宇宙 更新时间:2023-11-04 00:37:34 27 4
gpt4 key购买 nike

当我找到这个声明时,我正在获取有关函数指针的信息:

char (* ( *f())[])();

我试图找出它的含义,但我不能...

它指的是什么?

最佳答案

分解如下:

         f           -- f
f() -- is a function returning
*f() -- a pointer to
(*f())[] -- an array of
*(*f())[] -- pointer to
(*(*f())[])() -- function returning
char (*(*f())[])(); -- char

[] 等后缀运算符和函数调用 () 绑定(bind)在 * 等一元运算符之前,因此

*a[]      -- is an array of pointer
(*a)[] -- is a pointer to an array
*f() -- is a function returning a pointer
(*f)() -- is a pointer to a function

找到最左边的标识符并找出路,对任何函数参数递归应用这些规则。

编辑

在对另一个答案的评论中,KerrekSB 建议使用 typedef,这肯定会使代码扫描更容易:

typedef char CharFunc();
typedef CharFunc *CharFuncPtr;
typedef CharFuncPtr CharFuncPtrArr[N];
typedef CharFuncPtrArr *CharFuncPtrArrPtr;
typedef CharFuncPtrArrPtr CharFuncPtrArrPtrFunc();

CharFuncPtrArrPtrFunc *f;

您可能想出一个更好的命名约定。但即便如此,

CharFuncPtrArrPtrFunc *f;

肯定看起来

char (*(*f())[])();

但是它更好吗?

根据我的经验,答案通常是否定的,尤其是涉及指针类型时。 f 指向的函数应该是什么样子的?我怎么调用它?我应该传递给它什么参数?我如何处理函数 f 指向的返回值?我如何在表达式中使用它?我必须查找 CharFuncPtrArrPtrFunc 的定义,这意味着我还必须查找 CharFuncPtrArrPtrCharFuncPtrArr 等的定义,等等,等等,然后我必须在脑子里想出调用的结果语法。

char (*(*f())[])(); 几乎完全不可读,但它一目了然地告诉我如何我应该调用该函数f 指向以及如何使用返回值。

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com