C中的Char指针意外地工作

时间:2013-08-31 16:56:07

标签: c pointers

int main()
{
    char *p = "ayqm";
    char c;
    c = ++*p++;
    printf("%c",c);
}

我认为它应该打印'c'但它打印'b'。请解释一下。

3 个答案:

答案 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'