以下代码的输出不应该是f
我得到一个输出e
#include<stdio.h>
void main(){
char arr[]="Geeks";
char *ptr = arr;
++*ptr++;
printf("%c\n",*ptr);
}
以下代码的输出不应该是f
我得到一个输出e
#include<stdio.h>
void main(){
char arr[]="Geeks";
char *ptr = arr;
++*ptr++;
printf("%c\n",*ptr);
}
不,不应该。您的代码递增第一个字符,然后将指针向前移动一个。指针将指向第一个e
,并且根据您的语言环境/字符编码,第一个字母很可能是H
. 该表达式根据优先级和关联性规则解析为:
++(*(p++))
是的,表达式被解析为 ++ * ((ptr++)),首先计算 ptr++,但是因为它是后缀增量,所以新计算的值不会更新 ptr 的旧值,直到语句结束 (;) 。Next ++**( ptr++ ) 是根据 ptr 的旧值计算结果,G 变为 H。现在所有工作都完成了,语句结束并更新 ptr 值,指向下一个元素 e。