首页 > 解决方案 > K&R 中第 132 页的运算符优先级

问题描述

我正在阅读 K&R,我被困在下面的句子中。

*p -> str++在访问它指向的任何内容后递增 str (就像*s++

我同意它所说的*p -> str++,但是对于 *s++我来说,这没有任何意义。我认为 *s++将在递增 s 之后访问它指向的任何内容,就像(*s)++

标签: coperator-precedence

解决方案


->和后缀都比, 具有从左到右的关联性++更高的优先级。*

该表达式*p->str++首先可以读为*(p->str)++,这使得语义上与 相同*s++,而后者又可以读为*(s++)。所以是的,间接将在增量( )之后expr++发生,但是

后缀递增和递减运算符的结果是 expr 的值。

因此,

  • p->str, 或s, 产生一个适用于(本例中的指针类型)的可修改左值。++

  • ++(后缀)然后就地递增这个值,计算为递增表达式的值。

  • *对此指针值执行间接操作。

然而,将在增加结果值之前(*s)++执行间接操作。


推荐阅读