++(post,prefix)和dereference运算符的优先级

时间:2013-05-27 14:08:08

标签: c

以下代码的输出不应为f

我得到了输出e

#include<stdio.h>

void main(){

    char arr[]="Geeks";
    char *ptr = arr;
    ++*ptr++;
    printf("%c\n",*ptr);

}

2 个答案:

答案 0 :(得分:4)

不,不应该。您的代码会增加第一个字符,然后将指针向前移动一个。指针将指向第一个e,并且根据您的区域设置/字符编码,第一个字母很可能是H。表达式解析为according to precedence and associativity rules

++(*(p++))

答案 1 :(得分:2)

是表达式被解析为++ * ((ptr ++)),首先计算ptr ++,但因为它是后缀增量,所以新的计算值不会更新ptr的旧值,直到语句结束(;)。接下来++ **(ptr ++)是根据ptr的旧值计算得到的,G变为H.现在所有的工作都完成了,语句结束并且ptr值被更新,指向下一个元素即e。