C++で動的配列を初期化する方法を解説!new演算子の使い方とサンプルコード
C++では、new演算子を使うことで、実行時にサイズを決定できる動的配列を作成できます。本記事では、動的配列の基本的な初期化方法と、関数から配列を返すテクニックについて、実際のコード例を交えてわかりやすく解説します。
動的配列とは?
通常の配列(静的配列)はコンパイル時にサイズが固定されますが、動的配列はプログラムの実行中にヒープ領域へメモリを確保するため、必要なサイズを実行時に柔軟に決められます。C++ではnew演算子でメモリを確保し、使い終わったらdelete[]で解放するのが基本の流れです。
また、動的配列は関数内で確保したメモリがスコープを抜けても有効なため、ローカル配列を関数から返したい場合にも活用できます。スタック上の通常のローカル配列をそのまま返すと未定義動作になりますが、動的に確保した配列なら安全にポインタとして返せるのが大きな利点です。
サンプルコード
以下は、関数Array()内で動的配列を初期化し、そのポインタをmain()関数へ返すC++プログラムです。
#include <iostream>
using namespace std;
int* Array() {
int* a = new int[100]; // 要素数100のint型動的配列を確保
a[0] = 7;
a[1] = 6;
a[2] = 4;
a[3] = 5;
return a; // 動的配列の先頭アドレスを返す
}
int main() {
int* p = Array();
cout << "The elements are:" << p[0] << " " << p[1] << " " << p[2] << " " << p[3];
delete[] p; // 使い終わったらメモリを解放
return 0;
}実行結果
The elements are:7 6 4 5
コードのポイント
- new int[100]:int型100個分の連続したメモリをヒープ上に確保し、先頭アドレスをポインタ
aに代入します。 - 要素の初期化:インデックスを指定して各要素に値を代入しています。ここでは最初の4要素に7、6、4、5を設定しました。
- return a:動的に確保された配列は関数終了後もメモリが保持されるため、ポインタ経由で呼び出し元でも利用できます。
- delete[] p:動的配列は自動的に解放されないため、使用後は必ず
delete[]でメモリを解放しましょう。忘れるとメモリリークの原因になります。
まとめ
C++で動的配列を初期化するには、new演算子でメモリを確保し、各要素に値を代入します。動的配列は関数から返しても有効なため、ローカル配列を戻り値として扱いたい場面で特に便利です。ただし、確保したメモリはdelete[]での解放を忘れずに行いましょう。より安全に管理したい場合は、std::vectorやスマートポインタ(std::unique_ptr<int[]>など)の活用も検討するとよいでしょう。
-
C++のnew演算子を使って2次元配列を動的に宣言・生成する方法
動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ
-
Java 9のJShellで配列を初期化・操作する方法を徹底解説
JShellは、Java 9から導入されたコマンドラインツールであり、簡単な文や式、クラス、メソッド、変数などを入力すると、その評価結果を即座に出力してくれる便利な機能です。 Javaにおける配列もまたオブジェクトの一種です。配列を使用するには、まず宣言を行い、その後に生成(インスタンス化)する必要があります。整数型の配列を格納する変数を宣言する場合は、「int[] array」のように記述します。なお、配列のインデックスは「0」から「配列の長さ - 1」までの範囲となる点に注意しましょう。 以下のコードスニペットでは、インデックスを使って配列から特定の要素を取得する方法を示しています。要素へ