4

私は今スタックオーバーフローで尋ねているのと同じトピックに関するすべての検索結果を読んだところですが、それは私の好奇心の答えではありません.しかし、ここにあります.

質問

1.)私が知っていることから、静的バインディングはコンパイル時に設定され、実行時にそこにあることを意味しますが、動的バインディングは実行時に設定されることを意味します。

2.)私が読んだ動的配列について紹介した本では、実行時に動的配列のサイズを設定できると記載されています。これはこの方法で行われます。

コード

int size;
cin >> size;
int * pz = new int [size]; // dynamic binding, size set at run time
delete [] pz; // free memory when finished


3.) このコードでは、実行時に動的配列サイズを設定できると書かれています。

コード

int size;
cin >> size;
int array[size];
//After the array declaraction i assign value to it to check whether it works or not.


4.)上記のコードも機能するので、通常の静的配列でも同じことができるので、動的配列の何が特別なのか知りたいです。

5.)動的配列は実行時にメモリを解放できるのに対し、静的配列はそれが特別な理由ではないためですか??


私の質問を読んでくれてありがとう、私が犯した間違いを指摘してください。

4

3 に答える 3

6

動的サイズの静的配列 (可変長配列、短い VLA と呼ばれます) は、コンパイラの言語拡張のおかげでのみ機能します。これは C99 のものであり、C++ 標準には含まれていないため、移植できません。

もう 1 つの明らかな違いは、動的配列へのポインターを別の場所に渡したり、保存したり、関数から返すことができることです。スコープの最後で破棄されるため、静的配列ではこれを行うことはできません。

于 2011-11-21T02:44:42.113 に答える
2
int size;
int array[size];

サイズがコンパイル時定数または期待される定数式ではないことを示すコンパイル時エラーをスローします。

このような配列を宣言します

int array[5]

また

const int size = 100;
int array[size];

アレイのサイズを事前に知っている場合。

それ以外の場合は、new anddelete[]アプローチを使用します。std :: vectorを優先して、この構成を完全に回避することをお勧めします

于 2011-11-21T02:39:58.797 に答える
1

早期バインディング:-ほとんどのバインディングが翻訳中、プログラムの処理の早い段階で行われる言語は、早期バインディングがあると言われています。
遅延バインディング:-遅延バインディングのある言語は、ほとんどのバインディングを実行時間まで遅らせます。

早期バインディング:-柔軟性が低くなります。
遅延バインディング:-プログラミングの柔軟性が向上します。

事前バインディング:-このデータでは、宣言データ型でのみ受け入れられます
。遅延バインディング:-この変数では、任意のタイプのデータを受け入れることができます。

早期バインディング:-割り当ての正しいタイプで検出されます。
レイト バインディング:-この不適切なタイプの割り当ての右側では、検出またはエラーが発生しません。

事前バインディング:-コンパイル時に型チェックを行う必要があります。
遅延バインディング:-実行時に型チェックを行う必要があります。

アーリー バインディング:-ユーザー コンパイラまたはインタプリタ。
遅延バインディング:-変数の遅延バインディングを持つ言語は、通常、コンパイラではなく純粋なインタープリターを使用して実装されます。

于 2012-10-05T00:22:52.317 に答える