配列を処理するときにポインターの使用を実験していたところ、C++が配列を処理する方法に少し混乱しました。これが私が書いたコードの関連する部分です:
//declare a string (as a pointer)
char* szString = "Randy";
cout << "Display string using a pointer: ";
char* pszString = szString;
while (*pszString)
cout << *pszString++;
まず、coutを使用して「pszString」にあるものを(参照を解除せずに)書き込もうとしたとき、文字列が表示されるのを見て少し驚きました。ポインタに変数ではなく文字列を指定したためだと思いました。
しかし、本当に私の注意を引いたのは、行からアスタリスクを削除すると、cout << *pszString++;
「Randyandyndydyy」と印刷されたことです。なぜ配列を書き込んだ後、1文字少なくして再度書き込むのかわかりません。私の推論は、char文字列を書き込んだ後、インクリメント演算子は、nullターミネータに到達する前に、インデックスをすぐに次の文字に移動するというものです。文字列が初めて出力された後、nullターミネータがループにfalseを返さない理由がわかりません。これは正しい理由ですか?配列とポインタの間にこの関係があるかどうか誰かが説明できますか?