1

次のコードの出力はf

出力が得られますe

#include<stdio.h>

void main(){

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

}
4

2 に答える 2

4

いいえ、そうすべきではありません。コードは最初の文字をインクリメントしてから、ポインターを 1 つ進めます。ポインターは最初の を指しe、ロケール/文字エンコーディングに応じて、最初の文字はおそらくH. 式は、優先順位と結合規則に従って次のように解析されます。

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

はい、式は ++ * ((ptr++)) として解析されます。最初に ptr++ が計算されますが、後置インクリメントであるため、新しい計算値はステートメントが終了するまで ptr の古い値を更新しません (;) 。次の ++**( ptr++ ) は、結果の ptr の古い値で計算され、G は H に変更されます。これですべての作業が完了し、ステートメントが終了し、ptr 値が更新され、次の要素である e を指します。

于 2013-05-27T15:49:40.397 に答える