リファレンスブックでこのforループを見つけたばかりですが、単なるポインタなので、比較で何が起こっているのか分かりません。C++:このようなforループは(ポインタを使用して)どのように機能しますか?
char input[300], *p, *q[300], **r = q;
cin.getline(input, 300);
for (p = input; *p; p++)
どのように動作しますか?
リファレンスブックでこのforループを見つけたばかりですが、単なるポインタなので、比較で何が起こっているのか分かりません。C++:このようなforループは(ポインタを使用して)どのように機能しますか?
char input[300], *p, *q[300], **r = q;
cin.getline(input, 300);
for (p = input; *p; p++)
どのように動作しますか?
forステートメントの2番目の式は、「真実性」について評価されます。
for (p = input; *p != 0; p++)
文字列は、NULLで終了しているので、これはどのように文字列の文字を通して1回の反復処理し、そして:ループは、以下の同等のものに変更する可能性があるため0ザ・と等しくない場合は文字が真であります終わりに止まる。
@selfこれは元々の質問です... – MikeCAT
input
はヌルで終了する文字列です。 cin.getline
は、読み取り文字列の最後の文字の後に0
を配置します。行が299文字を超える場合は、input[299]
になります。
char値は暗黙的にブール値に変換されます。ゼロでなければ真となり、ゼロであれば偽になります。したがって、ループ条件は*p != 0
に相当します。
そのため、ループは、文字列の最後であるゼロを見つけるまで配列を反復します。
実際には、それの後にASCII '\ 0'が置かれます。ゼロが同じであるかどうかわかりません。 –
@selfヌル文字は実際にはゼロです。意味論的な理由は別として、これはまた、ゼロに対する比較が通常2つの任意の数を比較するよりも速いので、より高速な反復を可能にする。 –
これは '* p!= 0'と同じです。 – jtbandes
バンヘッドヒッティングテーブル - 比較はどこですか? –