簡體   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