次のコードの出力は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);
}
いいえ、そうすべきではありません。コードは最初の文字をインクリメントしてから、ポインターを 1 つ進めます。ポインターは最初の を指しe
、ロケール/文字エンコーディングに応じて、最初の文字はおそらくH
. 式は、優先順位と結合規則に従って次のように解析されます。
++(*(p++))
はい、式は ++ * ((ptr++)) として解析されます。最初に ptr++ が計算されますが、後置インクリメントであるため、新しい計算値はステートメントが終了するまで ptr の古い値を更新しません (;) 。次の ++**( ptr++ ) は、結果の ptr の古い値で計算され、G は H に変更されます。これですべての作業が完了し、ステートメントが終了し、ptr 値が更新され、次の要素である e を指します。