動的に割り当てられた配列のサイズを増やすことが可能であることを私は知っています。
しかし、静的に割り当てられた配列のサイズを増やすことはできますか?はいの場合、どのように?
編集:この質問はC言語を対象としていますが、他の言語も考慮してください。他の言語でも可能ですか?
動的に割り当てられた配列のサイズを増やすことが可能であることを私は知っています。
しかし、静的に割り当てられた配列のサイズを増やすことはできますか?はいの場合、どのように?
編集:この質問はC言語を対象としていますが、他の言語も考慮してください。他の言語でも可能ですか?
簡単な答えはノーです、これはできません。したがって、名前は「静的」です。
現在、多くの言語には、静的に割り当てられた配列のように見えますが、実際には動的に割り当てられた配列への静的に割り当てられた参照があります。サイズを変更できるもの。
VB .NETでは、次のようになります。
Redim Preserve ArrayName(NewSize)
あなたがどんな言語を求めているのかわからないけど...
そして、私はこのコマンドをあまり使用しません...そのひどく非効率的です。リンクリストと増大するデータ構造ははるかに効率的です。
いいえそうではありません。ここには2つのオプションがあります。
はい、それはCでした。
注意すれば、を使用できますalloca()
。配列はスタックに割り当てられますが、コードスタイルの点では、使用した場合とよく似ていますmalloc
(ただし、必ずしもそうする必要はありませんがfree
、自動的に行われます)。それを「静的」配列と呼ぶかどうかを決めさせていただきます。
いいえ。静的割り当てにより、コンパイラはあらゆる種類の仮定を行うことができ、コンパイル中にプログラムに組み込まれます。
それらの仮定の中には次のものがあります:
(プログラムがRAMに格納されていれば、参照は更新される可能性がありますが、自己変更プログラムは非常に眉をひそめ、動的配列よりも確かに厄介です。)
技術的には、Cでは動的に割り当てられた配列のサイズを増やすことさえできません。
実際、realloc()
ある種の「新しいオブジェクトを作成してデータをコピーする」ルーチンを実行します。既存のヒープメモリオブジェクトのサイズはまったく変更されません。
したがって、答えは単純です。動的に割り当てられた場合でも静的に割り当てられた場合でも、割り当てられたオブジェクトまたはオブジェクトの配列のサイズを変更することはできません。
あなたができることは、希望のサイズでオブジェクトの別の静的に割り当てられた配列を作成し、データをコピーする関数を開発することによって同じ戦略を使用することです。オブジェクトの新しい配列が古い配列よりも小さい場合、差の中にある値は破棄されます。
唯一の違いは、古い配列のサイズと同じ新しい配列のサイズをコンパイル時に修正する必要があることです。