繁体   English   中英

++(后缀,前缀)和取消引用运算符的优先级

[英]precedence of ++ (post,prefix) nd dereference operator

以下代码的输出不应为f

我得到一个输出e

#include<stdio.h>

void main(){

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

}

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

++(*(p++))

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM