【C++言語】配列のサイズを取得する方法
C++言語での「配列のサイズを取得する方法」
配列のサイズを取得する基本的な方法
C++で配列のサイズを取得する最も基本的な方法は、`sizeof`演算子を使用することです。この演算子は、配列のバイト数を返しますが、配列のサイズを取得するためには、配列の要素のバイトサイズを考慮する必要があります。
#includeusing namespace std; int main() { int arr[10]; // 長さ10の整数型配列 cout << "配列のサイズは " << sizeof(arr) << " バイトです。" << endl; cout << "配列の要素数は " << sizeof(arr) / sizeof(arr[0]) << " 個です。" << endl; return 0; }
このコードでは、`sizeof(arr)`で配列全体のバイトサイズを取得し、`sizeof(arr[0])`で配列の1つの要素(ここでは整数)のバイトサイズを取得しています。配列の要素数を計算するために、配列の総バイト数を要素のバイト数で割っています。
配列のサイズを取得する演算子を使用する方法
`sizeof`演算子を使って配列のサイズを取得する方法は基本的で便利ですが、配列のポインタを使う場合に注意が必要です。ポインタは配列そのものを指し示すだけで、そのサイズ情報は持っていません。そのため、ポインタから配列のサイズを直接取得することはできません。
#includeusing namespace std; int main() { int arr[10]; // 長さ10の配列 int* ptr = arr; // 配列のポインタ // 配列のサイズは取得できない cout << "ポインタから配列のサイズを直接取得することはできません。" << endl; return 0; }
ポインタでは`sizeof`を使って配列全体のサイズを取得することはできません。これは、ポインタが配列の先頭を指しているだけで、配列のサイズに関する情報を持っていないためです。
配列のサイズを取得する関数を使用する方法
配列のサイズを取得する他の方法として、配列のサイズを引数として受け取る関数を作成することもできます。この方法は、配列が関数に渡されたときにサイズを保持するために便利です。
#includeusing namespace std; // 配列のサイズを返す関数 template size_t getArraySize(T(&)[N]) { return N; } int main() { int arr[10]; // 長さ10の配列 cout << "配列のサイズは " << getArraySize(arr) << " です。" << endl; return 0; }
ここでは、`getArraySize`というテンプレート関数を使用しています。この関数は配列のサイズを引数として受け取り、そのサイズを返します。この方法では、`sizeof`演算子を使うことなく、簡単に配列のサイズを取得できます。
配列のポインタとサイズの関係
ポインタを使う場合、配列のサイズを管理することは難しく、ポインタ自体は配列のサイズ情報を持っていません。しかし、配列の先頭を指すポインタを使って配列を操作することはよくあります。その場合、配列のサイズを別途記録する必要があります。
#includeusing namespace std; int main() { int arr[10]; // 長さ10の配列 int* ptr = arr; // 配列のポインタ size_t size = sizeof(arr) / sizeof(arr[0]); // 配列のサイズを手動で計算 cout << "配列のサイズは " << size << " です。" << endl; return 0; }
ポインタを使って配列のサイズを計算する場合は、`sizeof`演算子を使用して配列のバイト数を計算し、手動で要素数を求める必要があります。