2016-05-30 3 views
0

私は私のプロジェクトで動的な配列を使用しようとしていたが、私はこれを行うことができますなぜ私が理解することはできません。C++ダイナミックアレイ - なぜこれを行うことができますか?

int *a; 
a = new int[1]; 
a[100]=2; 

cout << a[100] << endl; 

私が意味する、私は1つの要素を格納することができます「」配列を作成し、なぜ配列の100番目の要素を使用できますか?それは存在すべきではありませんか?

+10

「バスケットボールではボールを持ち歩くことができない」と言っても、バスケットボールでボールを持ち上げて逃げることができます。 –

+2

あなたは働かないものをすることが許されているからです。あなたはアクセスする必要のないメモリにアクセスしています。すべてのベットはオフです。動作しているように見えるかもしれませんが、実際はそうではありません。 – jpw

+0

@KerrekSB Brilliant。 :-) – skypjack

答えて

1

いくつかの基本的なもの:
あなたの配列はメモリに保存され、すべてのセルには独自のアドレスがあります。配列aの名前は、メモリ内の開始位置を指します。 a[0]a[1]、またはa[index]は、*(a+index)と同じものです。メモリ内の(a + index)インデックスの値を取得/設定します。

実際には、これらのアドレスが変数(配列など)で使用されていなくても上書きすることができます。もちろん、これを行うべきではありませんが、あなたのコンパイラは気にならないでしょう(可変長配列を宣言することもできますが、コンパイラは気にしないかもしれませんが、それに気づくべきです)。

できるだけシンプルにしようとしましたが、詳しく説明する必要はありません。

関連する問題