プログラミングにおいて、要素数をプログラムの実行時に決定できる配列のことです。
可変長配列をサポートしているかどうかや、その実現方法(言語そのものがもつ機能なのか、標準ライブラリによる実現なのかなど)については、プログラミング言語ごとに違いがあります。いずれにしても、可変長配列の要素数は、その可変長配列を定義している箇所や、最初に使おうとするときに、変数の値によって指示されます。多くの実装では、いったん決定された要素数をあとから再度変更することはできません。
正しい定義はプログラミング言語ごとの仕様を調べる必要がありますが、可変長配列のためのメモリはスタック領域に確保され、自動記憶域期間を持つものとされることがあります。
可変長配列そのものをサポートしていなくても、動的メモリ割り当てを使用することで、任意の要素数を持った配列のようなものを実現することはできます。この方法では、一般的にはヒープ領域に確保されることになるため、さきほどの定義には沿っておらず、これを可変長配列とは呼ばないと考えることもあります。この方法で実現する場合は、動的配列と呼ぶことがあります。
可変長配列に対して、要素数がコンパイル時に決定され、その後に変更することができない配列を固定長配列と呼びます。
C言語では、C99 規格で可変長配列が導入されましたが、その後の C11 規格で、提供を必須としないオプション機能に変更となっています。
可変長配列を宣言する記述は、通常の配列を宣言する構文と同じですが、要素数の指定に変数を使う点が異なります。また、ブロックスコープでしか宣言できません。
int n = 100;
int a1[100]; // 通常の配列(固定長配列)
int a2[n]; // 可変長配列
C言語の可変長配列は、自動記憶域期間を持ちます。
詳細は、C言語編第25章を参照してください。
C++ は多くの点でC言語の仕様を引き継いだ言語ですが、可変長配列についてはサポートしていません(ただし、コンパイラが拡張機能としてサポートしていることはあります)。
C++ では、標準ライブラリの std::vector を使うことで、実行時に要素数を決定する配列を利用できます。std::vector は、あとから要素数を変更することもできるので、動的配列を実現したものともいえます。
#include <vector>
int n = 100;
std::vector<int> v(n);
std::vector については、新C++編を参照してください。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |