静的に割り当てられた配列のサイズを増やすことはできますか?

StackOverflow https://stackoverflow.com/questions/1678371

  •  16-09-2019
  •  | 
  •  

質問

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

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

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

役に立ちましたか?

解決

簡単な答えは「いいえ、それはできません」です。したがって、「静的」という名前が付けられます。

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

他のヒント

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

Redim Preserve ArrayName(NewSize)

どの言語を求めているのかわかりませんが...

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

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

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

そう、Cさんでした。

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

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

それらの仮定には次のようなものがあります。

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

(まあ、参考文献 できた プログラムが RAM に保存されている場合は更新される可能性がありますが、自己書き換えプログラムは非常に嫌われており、間違いなく動的配列よりも問題が発生します。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top