从北邮人论坛上http://bbs.byr.cn/#!article/Job/1426029看到这个问题,记录下来。
某公司笔试的一道题,解释下面几个函数?
int (*a())();int (*b[1])();
int (*c())[1];
--
解答:这个问题推荐看 C专家编程,总的来说,解析声明式,先从标识符开始,然后依次按照如下的有限顺序:
1)(),()里的当一个整体 2)后缀是[],表示数组;后缀是(),表示函数 3)前缀*,表示指向...的指针。
以int (*b[1])(); 为例,先找到b,然后看后缀,b[1]表示是一个数组,接下来看数组元素类型,*表示指向...的指针,接下来再看后缀,()表示函数,而且没有形参,接下来看函数的返回类型,就是int。所以这个表示是一个数组,数组元素是指向函数的指针,这个函数没有参数,并且返回类型为int
int (*c())[1]; 先看c,然后c()表示是一个函数,无形参,接下来就看函数的返回类型,*表示返回的是一个指针,后缀[1]表示是指向数组的指针,再看基本类型int表示数组元素是int,所以这个是表示声明一个函数,返回类型是指向整形数组的指针
--