Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++で配列の長さを求める方法|sizeof演算子とポインタ演算の使い方

C言語やC++で配列の長さ(要素数)を取得するには、いくつかの方法があります。本記事では、代表的な2つの手法——sizeof演算子を使う方法ポインタ演算を使う方法——について、サンプルコードと実行結果付きでわかりやすく解説します。

方法1:sizeof演算子を使う

sizeof() 演算子を使うと、配列全体のサイズをバイト単位で取得できます。配列全体のサイズを、配列の1要素あたりのサイズで割ることで、配列の長さ(要素数)を求めることができます。以下はC++での使用例です。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int arr[5] = {4, 1, 8, 2, 9};
    int len = sizeof(arr)/sizeof(arr[0]);
    cout << "The length of the array is: " << len;
    return 0;
}

上記プログラムの実行結果は以下の通りです。

The length of the array is: 5

プログラムの解説

変数 len には配列の長さが格納されます。まず sizeof(arr) で配列全体のサイズを取得し、それを sizeof(arr[0])(1要素分のサイズ)で割ることで要素数を計算しています。最後にその値を出力します。該当するコード部分は以下の通りです。

int arr[5] = {4, 1, 8, 2, 9};
int len = sizeof(arr)/sizeof(arr[0]);
cout << "The length of the array is: " << len;

方法2:ポインタ演算を使う

ポインタ演算を利用することでも、配列の長さを求めることができます。以下にそのデモプログラムを示します。

サンプルコード

#include <iostream>
using namespace std;
int main() {
    int arr[5] = {5, 8, 1, 3, 6};
    int len = *(&arr + 1) - arr;
    cout << "The length of the array is: " << len;
    return 0;
}

出力結果

The length of the array is: 5

プログラムの解説

*(&arr + 1) は、配列の全要素(この例では5個)を越えた直後のアドレス、つまり配列全体の末尾の次の位置を指します。一方、arr は配列の先頭要素のアドレスを表します。この2つのアドレスの差を取ると、配列の長さ(要素数)が得られます。該当するコード部分は以下の通りです。

int arr[5] = {5, 8, 1, 3, 6};
int len = *(&arr + 1) - arr;
cout << "The length of the array is: " << len;

注意点:sizeofを使う際の落とし穴

sizeof演算子による方法は、配列が同じスコープ内で宣言されている場合にのみ有効です。配列を関数に渡すとポインタへと退化(decay)するため、関数内で sizeof を使っても正しい要素数は取得できません。また、newmalloc で動的に確保した配列に対しても使用できません。

そのようなケースでは、C++では std::vectorstd::array などのコンテナを使用し、size() メンバ関数で要素数を取得するのが安全で推奨される方法です。

  1. 【C#】Lengthプロパティを使ってジャグ配列の長さを取得する方法

    ジャグ配列とはC#におけるジャグ配列(Jagged Array)は、「配列の中に配列」を持つ構造の配列です。各要素が異なる長さの配列を持てるため、多次元配列よりも柔軟なデータ管理が可能になります。この記事では、Lengthプロパティを使用して、ジャグ配列の長さ(要素数)を取得する方法を解説します。1. ジャグ配列を宣言・初期化するまず、ジャグ配列を宣言し、初期化します。以下のコードでは、各行に長さ2のint型配列を持つ5行分のジャグ配列を作成しています。int[][] arr = new int[][] {    new int[] { 0, 0 },&

  2. C#で配列の長さを取得する方法

    C#で配列の長さ(要素数)を取得するには、Lengthプロパティを使用します。このプロパティは、配列に格納されている全要素の数を整数値として返します。サンプルコード以下に具体的な使用例を示します。using System; class Program { static void Main(){ int[] arr = new int[10]; // 配列の長さを取得 int arrLength = arr.Length; Console.WriteLine(配列の長さ: + arrLength); } }実行結