2017-04-19 1 views
0

私はC++を初めて使いました。申し訳ありませんが、私はそれを見つけることができませんでした。 特定のサイズの配列を作成するのではなく、ポインタを使用するのはなぜですか?なぜ特定のサイズの配列を作成するのではなく、ポインタを使用するのですか?

int** ary = new int*[rowCount]; 
    for(int i = 0; i < rowCount; ++i) 
    ary[i] = new int[colCount]; 

int ary[rowCount][colCount]; 

2つの違いは何ですか? 最初のものはヒープメモリと2番目のスタックで動作しますが、なぜほとんどの人が1番目の方法で動作するのでしょうか?

+0

巨大なデータオブジェクトの代わりにメモリの場所で作業することができます...... –

+0

あなたはC++を初めて使用しているので、プロ(および落とし穴)彼らが割り当てられているメモリによって物事を参照する... –

+0

これを想像してみてください。あなたはテーブルの上にたくさんのブロックを置くつもりです。テーブルにはそれに砂糖の束があります。あなたはむしろ1)すべてのブロックをまとめてテープにして、それが収まるようにテーブル上のすべてを動かさなければなりませんか... 2)ブロックをテーブルに合わせて置いて、ブロックがどこにあるか。どちらの場合も、ブロックについては何も知らないが、それらはすべてどこにあるかを知っている。物事を扱うときの問題の1つは、ブロックを扱ったときに、両方の場合にすべてのブロックを削除することを忘れないようにすることです。 – Fallenreaper

答えて

1

2つ目の違いは、rowCountとcolCountの両方がconstant expressionsの場合のみコンパイルされることです。 Array declarationも参照してください。

一方、実行時にこれらの変数が変更されても、最初のコンパイルはコンパイルされます。あなたは、C++を使用しているあなたは、より良い最初のオプションのためのstd::vectorと第二のためstd::arrayを使用している場合はところで

は、すべてこれはCに似ています。

+0

なぜdownvote? –

関連する問題