两个规则轻松解读复杂的声明

上周被算法部门的头抓壮丁帮忙面试了几位AE的候选人,这个职位对编程水平的要求其实并不算高,能看懂C或者C++代码,并且可以根据客户的要求做一些小的修改即可。几位候选人都在知名外企工作多年,职位估计也不低,年龄也比我大一点。要求候选人现场手写代码,真是有点太难为情,但又不能不仔细考察。在网上找了几道指针和位操作相关的题,结果让我颇感意外,竟然没有答对的。大外企大国企大锅饭废人不假,但是面试前临时抱佛脚也是应该有的吧?不过也可能是人家看不上我们小公司,权当练手罢了。
废话少说,也贴一道抄来的面试题:解读声明int *(*x[10]) (void)?
C语言设计相关的教材里面讲得很清楚,无论多么复杂的声明,两个规则来解读:
1. 从内往外解读声明符
换句话说,找到声明的标识符,并且从此处开始解读。
2. [ ]和( )优先级高于*
如果在标识符前面,而标识符后面跟着[ ],那么标识符表示数组而不是指针。同样的,如果在标识符前面,而标识符后面跟着( ),那么标识符表示函数而不是指针。
举例:

声明解读
int *ap[10];ap是指向int的指针数组
float *fp(float);fp是指向float的指针函数
void (*pf)(int);pf是指向形参为int,返回值为void的函数指针
int *(*x[10]) (void);x是大小为10且指向某函数的指针数组,此函数没有输入参数,返回值为int指针
char (*x[10])(int);x是大小为10且指向某函数的指针数组,此函数输入为1个int,返回值为char
int (*x(int))[5];x是指针函数,此函数的输入为1个int,返回值为指向大小为5的int数组的指针
float *(*x(void)) (int);x是指针函数,指向一个没有输入参数且返回值为指针函数y的函数;y是输入为1个int,返回值为float指针的指针函数
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值