int main()
{
char *p = "ayqm";
char c;
c = ++*p++;
printf("%c",c);
}
我认为它应该打印'c',但它打印'b'。请解释。
这是由于运算符优先级,它使后缀++
运算符增加指针而不是取消引用的值。
所以你的表达式返回第一个'a'
增加前缀增加的第一个'b'
,但由于上面提到的运算符优先级,后缀增加实际上是指针。
该表达式可以分解如下,这可以阐明发生了什么。
c = ++*p++;
steps:
1) (*p) // (*p) == 'a'
2) ++(*p) // (*p) == 'b'
3) c = (*p) // c == 'b'
4) p++ // p -> 'y'
编辑:编辑以澄清每个评论对 (*p) 的修改
这里后缀具有最高优先级,但它只会在语句之后影响值。++ 和 * 具有相同的优先级,并且它们具有右结合性。在那里它会像这样工作:
*p -> 计算结果为 a
然后 ++'a' 计算结果为 'b'