以下代码的输出不应为f
我得到了输出e
#include<stdio.h>
void main(){
char arr[]="Geeks";
char *ptr = arr;
++*ptr++;
printf("%c\n",*ptr);
}
答案 0 :(得分:4)
不,不应该。您的代码会增加第一个字符,然后将指针向前移动一个。指针将指向第一个e
,并且根据您的区域设置/字符编码,第一个字母很可能是H
。表达式解析为according to precedence and associativity rules:
++(*(p++))
答案 1 :(得分:2)
是表达式被解析为++ * ((ptr ++)),首先计算ptr ++,但因为它是后缀增量,所以新的计算值不会更新ptr的旧值,直到语句结束(;)。接下来++ **(ptr ++)是根据ptr的旧值计算得到的,G变为H.现在所有的工作都完成了,语句结束并且ptr值被更新,指向下一个元素即e。