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