1

まず、私の悪い英語について申し訳ありません。すごいと思うことを聞きたい。これがすべての人にとって素晴らしいかどうかはわかりませんが、私にとってはそうです:)サンプルコードを挙げましょう

char Text[9] = "Sandrine";
for(char *Ptr = Text; *Ptr != '\0'; ++Ptr)
cout << Ptr << endl;

このコードは印刷します

Sandrine
andrine
ndrine
drine
rine
ine
ne
e

C++ では複雑な問題であることはわかっています。なぜ Ptr を呼び出して画面を印刷すると、すべての配列が印刷されるのですか。ただし、テキスト配列が動的配列の場合、Ptr は動的配列 (テキスト) の最初のケースのみを出力します。なぜそれが起こるのですか?ポインティング配列の組み合わせがどうなるかをC++配列で説明してください。

助けてくれてありがとう。

4

2 に答える 2

3

ここでは、配列について特別なことは何もありません。代わりに、特殊な動作は次のchar const*とおりです。C では、文字列を表すためにヌル文字で終わる一連の文字へのポインターが使用されます。C++ は、この文字列の概念を文字列リテラルの形式で継承しています。これらの文字列の出力をサポートするために、出力演算子 forchar const*は、a へのポインターを実際には文字列の先頭へのポインターであると解釈charし、最初の null 文字までのシーケンスを出力します。

于 2013-11-09T23:02:20.843 に答える
0

あなたが書くとき

char Text[9] = "Sandrine";

「テキスト」はメモリ内のアドレスであり、文字列の開始アドレスであり、最初の場所には「S」があり、その後に残りの文字が続きます。C の文字列は \0 で区切られます。つまり、"S andrine \0" です。

あなたが書くとき

for(char *Ptr = Text; *Ptr != '\0'; ++Ptr)
  cout << Ptr << endl;

forループが最初に実行されるとき、文字列全体が出力されます。これは、PtrをインクリメントするときにPtrが文字列の先頭をchar* Ptr = Text指しているためです。次の文字Text + 1、つまり「a」などを指しています。Ptrが\0forループを終了すると、 .

于 2013-11-09T23:09:02.470 に答える