1

以下代码的输出不应该是f

我得到一个输出e

#include<stdio.h>

void main(){

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

}
4

2 回答 2

4

不,不应该。您的代码递增第一个字符,然后将指针向前移动一个。指针将指向第一个e,并且根据您的语言环境/字符编码,第一个字母很可能是H. 该表达式根据优先级和关联性规则解析为:

++(*(p++))
于 2013-05-27T14:11:18.407 回答
2

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

于 2013-05-27T15:49:40.397 回答