C语言中的复杂声明

3

我遇到了一个非常复杂的声明,我无法理解:

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

我想知道如何确定正在声明什么。此外,由于这个问题是在面试中问我的,所以我想知道这些类型的代码是否真的在软件行业中使用?
如果不是,那么问这个问题的目的是什么?

2
输入到http://cdecl.ridiculousfish.com中... - Martin R
f 是一个包含 3 个指向函数的指针的数组,每个函数返回一个指向包含 5 个字符的数组的指针。 - Sourav Ghosh
它包含一个已弃用的非原型样式函数声明。 - too honest for this site
这种复杂的语句在实时编码中不会被使用。 动机可能是为了特别测试您对运算符及其优先级的知识 :) - Akash Mahapatra
1个回答

10

将声明分解为几个部分。
最内层的一对括号:(* f [3])表示“f”是一个包含3个指针元素的数组。

( *f )() 表示 'f' 是一个指向函数的指针,因此
( * f[3] ) () 表示 'f' 是一个包含3个指向函数的指针的数组。

( * ( * f[3] ) ()) 表示 'f' 是一个包含3个返回指针的函数指针的数组。

因此,

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

意味着f是一个包含3个指向返回5个字符数组指针的函数的数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接