1

動的に割り当てられた配列のサイズを増やすことが可能であることを私は知っています。

しかし、静的に割り当てられた配列のサイズを増やすことはできますか?はいの場合、どのように?

編集:この質問はC言語を対象としていますが、他の言語も考慮してください。他の言語でも可能ですか?

4

6 に答える 6

6

簡単な答えはノーです、これはできません。したがって、名前は「静的」です。

現在、多くの言語には、静的に割り当てられた配列のように見えますが、実際には動的に割り当てられた配列への静的に割り当てられた参照があります。サイズを変更できるもの。

于 2009-11-05T04:37:34.347 に答える
1

VB .NETでは、次のようになります。

Redim Preserve ArrayName(NewSize)

あなたがどんな言語を求めているのかわからないけど...

そして、私はこのコマンドをあまり使用しません...そのひどく非効率的です。リンクリストと増大するデータ構造ははるかに効率的です。

于 2009-11-05T04:36:28.950 に答える
0

いいえそうではありません。ここには2つのオプションがあります。

  1. 動的なものを使用する
  2. または、メモリを浪費するリスクがありますが、配列が格納する要素の最大数について考えている場合は、それに応じて静的に割り当てます

はい、それはCでした。

于 2009-11-05T04:36:52.550 に答える
0

注意すれば、を使用できますalloca()。配列はスタックに割り当てられますが、コードスタイルの点では、使用した場合とよく似ていますmalloc(ただし、必ずしもそうする必要はありませんがfree、自動的に行われます)。それを「静的」配列と呼ぶかどうかを決めさせていただきます。

于 2009-11-05T04:50:20.667 に答える
0

いいえ。静的割り当てにより、コンパイラはあらゆる種類の仮定を行うことができ、コンパイル中にプログラムに組み込まれます。

それらの仮定の中には次のものがあります:

  1. アレイの直後に他のデータを配置しても安全です(拡張の余地を残さないでください)。
  2. 配列が特定のアドレスで始まり、それがプログラムのマシンコードの一部になること。アドレスへの参照を更新できないため、新しい配列をどこかに割り当てる(そしてそれを使用する)ことはできません。

(プログラムがRAMに格納されていれば、参照は更新される可能性がありますが、自己変更プログラムは非常に眉をひそめ、動的配列よりも確かに厄介です。)

于 2009-11-05T05:12:56.600 に答える
0

技術的には、Cでは動的に割り当てられた配列のサイズを増やすことさえできません。

実際、realloc()ある種の「新しいオブジェクトを作成してデータをコピーする」ルーチンを実行します。既存のヒープメモリオブジェクトのサイズはまったく変更されません。

したがって、答えは単純です。動的に割り当てられた場合でも静的に割り当てられた場合でも、割り当てられたオブジェクトまたはオブジェクトの配列のサイズを変更することはできません。

あなたができることは、希望のサイズでオブジェクトの別の静的に割り当てられた配列を作成し、データをコピーする関数を開発することによって同じ戦略を使用することです。オブジェクトの新しい配列が古い配列よりも小さい場合、差の中にある値は破棄されます。

唯一の違いは、古い配列のサイズと同じ新しい配列のサイズをコンパイル時に修正する必要があることです。

于 2020-01-15T13:20:19.410 に答える