int * (*ptr)()

int(*ptr)*()怎么理解?

2008-12-09 20:23
先声明写成这样int(*ptr)*()是错误的,遇见这样的问题,不用怕一步一步分析就出来了:
1.在上面的表达式中从左到右有四个运算符()、*、*、()
2.运算符的优先级()比*高,()的结合方向是自左到右,*的结合方向是自右到左
3.对于上面的表达式是先运算(*ptr),这是定义了一个指针变量ptr,指向什么类型呢?看下面
4.下来再运算下一个小括号(),是一个函数
5.接下来运算*(),对于这样的运算C编译器是无法解释的,所以int(*ptr)*()是错的。

但是,写成int * (*ptr)()这样,这个表达式就是正确的,看分析
1.和上面一样同样是四个运算符,但是放置顺序不一样,从左到右是*、()、*、()
2.由于小括号的运算级比较高,结合方法又是自左向右,所以先运算(*ptr),表明定义了一个指针ptr
3.接下来再运算最右边的小括号(),表明是一个函数
4.接下平再运算* (*ptr)(),表明函数的返回值是一个指针
5.那么int * (*ptr)()表明定义了一个指针变量ptr,它指向一个没有参数,并且返回值是一个整型指针的函数。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值