C语言复杂指针声明应如何阅读

参考:http://www.diybl.com/course/3_program/c++/cppsl/2008217/100104.html

The   right-left   rule:   Start   reading   the   declaration   from  the  
 innermost   parentheses,   go   right,   and   then   go   left.
  When   you   encounter   parentheses,   the   direction   should  
be  reversed.   Once   everything   in   the   parentheses   has   been  
parsed,   jump   out   of   it.   Continue   till   the   whole  declaration  
 has   been   parsed.

文章作者的修正:
应该是从未定义的标识符开始阅读,而不是从括号读起,之所以是未定义的标识符,
是因为一个声明里面可能有多个标识符,但未定义的标识符只会有一个。
 
下面是我回答的网页上面遗留的问题



int (*(*func)[5][6])[7][8]; 

找到标识符 func 
看右边:NONE 
看左边:* 说明func是一个指针 

跳出括号 
看右边:[][]是一个二维数组 
看左边:* 说明数组元素类型是指针 

跳出括号 
看右边:[][]是一个二维数组 
看左边: int 说明数组元素类型是整型 
总结: func是一个指向二维数组A的指针,A数组的元素是指向int型的二维数组的指针 


int (*(*(*func)(int *))[5])(int *); 

找到标识符 func 
看右边:NONE 
看左边:* 说明func是一个指针 

跳出括号 
看右边:(int *) 说明是一个函数,函数参数是指向int的指针 
看左边:* 说明返回值是一个指针 

跳出括号 
看右边:[]说明是一个数组 
看左边:* 说明数组的元素是指针 

跳出括号 
看右边:(int *)说明是一个函数,函数参数是指向int的指针 
看左边:int 说明函数返回值是整型 

总结:func是一个指向A函数的指针,A函数的参数是int,A函数的返回值是一个指向B数组的指针,B数组的元素是指向B函数的指针,B函数的参数是一个指向int的指针,返回值是int 

int (*(*func[7][8][9])(int*))[5]; 

找到标识符 func 
看右边:[][][]说明func是一个三维数组 
看左边:* 说明数组的元素类型是指针 

跳出括号 
看右边:(int *) 说明是一个函数,函数参数是指向int的指针 
看左边:*说明函数的返回值是一个指针 

跳出括号 
看右边:[]说明是一个数组 
看左边:int 说明数组的元素类型是整型 

总结:func是一个以指向A函数的指针为元素的三维数组,A函数的参数是指向int的指针,A函数的返回值是一个B数组,数组的元素是int

 

转自:http://acmluffy.ycool.com/post.3194680.html

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值