*p++ は *p += 1 となぜ違うのでしょうか? 質問する

*p++ は *p += 1 となぜ違うのでしょうか? 質問する

考慮する:

void foo1(char **p) { *p++; }
void foo2(char **p) { *p += 1; }

そして

char *s = "abcd";
char *a = s; 
foo1(&a); 
printf("%s", a); //abcd

foo2()ただし、代わりに以下を使用する場合:

char *a = s; 
foo2(&a); 
printf("%s", a); //bcd

誰か説明してくれませんか?

ベストアンサー1

鍵となるのは、演算子+=++演算子の優先順位です。演算子は演算子++よりも優先順位が高いため+=(実際、Cでは代入演算子の優先順位は2番目に低い)、

*p++

ポインタを逆参照し、ポインタをインクリメントすることを意味する自体1 ずつ増加します (通常、ポインタ演算の規則によれば、必ずしも 1 バイトではなく、sizeof(*p)結果のアドレスに関するものです)。一方、

*p += 1

値を増やすことを意味しますポインタによって指される1 つ増やします (ポインター自体は何もしません)。

おすすめ記事