2

これはおそらくばかげた質問です。C ++で遊んで、少し混乱するこのコード行を見つけます

char buffer[7] = {'0', '1', '0', '9', '0', '1'};

// It prints 010901
printf("%s", buffer);

// It prints 0901
printf("%s", buffer+2);

なぜバッファ変数を (+ 2) できるのに、右に 2 文字シフトしたようになるのでしょうか?

4

5 に答える 5

0
char buffer[7] = {'0', '1', '0', '9', '0', '1' , '\0'};

Cの配列名は、基本的に配列の場所へのポインターでもあります

buffer[i]*(buffer+i)つまり、ポインター値に追加iする [ポインター演算に従います]として変換されます。したがって、その場所の住所が表示されます。 に遭遇するまで a を出力しprintfます。したがって、出力。%s\n

ポインターと配列について知るには、これを確認してください

于 2013-04-18T12:00:21.583 に答える
0

その文字列をヌルで終了する必要があります、仲間!

char buffer[7] = {'0', '1', '0', '9', '0', '1', '\0'};

// It prints 010901
printf("%s", buffer);

// It prints 0901
printf("%s", buffer+2);
于 2013-04-18T12:01:46.227 に答える