#include <stdio.h> int main(void) { char str[] = { "abcde" }; for (char* p = str; *p; ++p) { ++(*p); printf("%s\n", &(*p)); } }
結果は bbcde ccde dde ee f
ただなんでこのような結果になるのか自分で書いて置きながらわからないので、自分なりに解説すると同時に疑問点を上げていきます。
まずchar* p = strより、strに入っている文字列abcdeをchar* p により、ポインタpの指すアドレスの番号ではなく、アドレスに入っている文字列abcde(文字コード)が渡される。そして、for文の++pにより文字列のアドレスに入っている文字コードの数値が+1されるのでポインタpが先頭のアドレスから表す文字列はbcdeとなる、それからpには文字コードが一つしか入らないようなので、「b」だけが入る、そして、**なぜかデバッグの結果より[0]にpに代入されたbが代入され、
strの中身の数列はbcdeとなっているので、なんで[6]にbが代入されないのかわからないですが**、*pに代入されたbが代入されたbが[0]として、bbcdeとなりました。
太い黒字で書いた部分の疑問がわかりません。
0. 疑問1 なぜpには文字コードが一つしか入らないのか。
0. 疑問2 なぜ[0]にpに代入されたbが代入されたのか、個人的には文字列は最後に表示するためてっきりbcdebだと思っていました。