私はC++を使い始めています。このコードスニペットで遊んでいる間に、別の 出力を理解したかったのです。ループとメモリ管理におけるC++ポインタ算術演算?
私はこのコードを実行すると、私は「私」であるPTRのdeferenced値 、ということを理解int main()
{
int i = 3;
int *ptr = &i; //stores address of the i
while(*(ptr)--) //the same as i--
{
cout << *ptr << endl;
}
}
、私はを使用する場合、「i」が0に等しい。しかしとき1は、ループを抜ける から差し引かれますwhile(* ptr--)の代わりにwhile(*(ptr) - )私は最終的に0になるランダムな整数のリストを取得し、ループが壊れます。私の理解へ
私は、各ループで& I(* PTR)の先頭アドレスからのバイト(1つのint型のサイズ)を引いています* ptr--を使用しています。しかし、なぜプログラムは最終的に終了するのですか? "i"の値が何であっても、プログラムは23個の乱数を出力し、最後の数字は0になり、ループは終了します。プログラムのメモリが不足しているため、オーバーフローエラーが発生しませんか?
ただし、を使用しているときに(ptr--)のプログラムは無限ループに入ります。 正確には何が起こっていますか?
ありがとうございました。
ちょうどループが長いからといって、無限であるとは限りません。 – harold
'* ptr - 'と '*(ptr) - 'はまったく同じです... –