打印

c运算符优先级别的问题

[复制链接]
1648|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lht5631080|  楼主 | 2007-11-23 15:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教大侠:
  如下代码:
  int a[2]={1,2};
  int *p,y;
  p=a;
  y=*(p++);
  看老谭的书上说,先*p,然后p++。即y=a[0],而不是a[1]。我觉得疑惑,调试结果的确y=a[0]=1。根据C的C运算符优先级别规定,()运算符高于*,y=*(p++)应该是先计算(p++),即p加1,然后取(p+1)指向的值,即Y=*(p+1)=a[1]=2。而根据老谭的解释却是先*与p结合,y=*p,再p与++结合。那么()运算符根本就没有起作用,或者说在这里*运算符级别高于()运算符。这个矛盾究竟是我理解有问题,还是C的问题呢?
  那位大侠帮帮忙,解惑一二?

相关帖子

沙发
computer00| | 2007-11-23 15:42 | 只看该作者

++运算符是先取值,然后再加一。所以这个表达式是后面的p++

但是却是先取p的值,然后再对p加1,这个是后++的定义。如果是++p,就不一样了。

使用特权

评论回复
板凳
mannerfh| | 2007-11-23 15:55 | 只看该作者

不是LZ说的

不是LZ说的*运算符级别高于()运算符,而是这里的p本来就是先取出值,然后再加1,所以正好与*(p++)是一样的,

使用特权

评论回复
地板
lht5631080|  楼主 | 2007-11-23 16:28 | 只看该作者

运算符优先级表现在何处?

那么请告诉我,()运算符在这里起什么作用?
*(p++)=*p++。()运算符优先级表现在何处?

使用特权

评论回复
5
computer00| | 2007-11-25 02:57 | 只看该作者

你试试(*p)++和*(p++)就知道表现在何处了...

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

75

帖子

0

粉丝