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

C言語の多次元配列とは?行優先・列優先の仕組みとサンプルコード

多次元配列とは

配列とは、同種のデータ(ホモジニアスなデータ)をまとめて管理するための基本的なデータ構造です。配列の要素は、メモリ上の連続した領域に順番に配置されます。しかし実際のプログラミングでは、1次元の配列だけでは不十分なケースが少なくありません。例えば、表形式のデータや行列を扱う場合には、2次元配列やさらに多くの次元を持つ多次元配列を作成する必要があります。

行優先方式と列優先方式

多次元配列をメモリ上に表現する方法には、大きく分けて2つのアプローチがあります。ひとつは行優先(Row-Major)方式、もうひとつは列優先(Column-Major)方式です。

r行 c列の2次元配列を考えてみましょう。この配列の要素数は n = r × c で表されます。位置 A[i, j](ただし 0 ≤ i < r、0 ≤ j < c)にある要素は、範囲 [0, n-1] 内のいずれかの整数へ対応付けられます。

  • 行優先方式の場合:0行目の要素を左から右へ並べ、その後ろに1行目、2行目…と続けて格納します。このときの対応付け(マッピング関数)は i × c + j です。
  • 列優先方式の場合:0列目の要素を上から下へ並べて格納します。マッピング関数は i + j × r となります。

C言語は行優先方式を採用しているため、2次元配列であっても内部的には1次元の連続したメモリとして管理されている点を覚えておくと良いでしょう。

サンプルコード

#include <stdio.h>
int main () {
    /* 5行2列の配列 */
    int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}};
    int i, j;
    /* 各配列要素の値を出力 */
    for ( i = 0; i < 5; i++ ) {
       for ( j = 0; j < 2; j++ ) {
          printf("a[%d][%d] = %d\n", i,j, a[i][j] );
       }
   }
   return 0;
}

実行結果

a[0][0]: 0
a[0][1]: 0
a[1][0]: 1
a[1][1]: 2
a[2][0]: 2
a[2][1]: 4
a[3][0]: 3
a[3][1]: 6
a[4][0]: 4
a[4][1]: 8

このように、C言語では a[行][列] の形式で各要素にアクセスできます。添字は0から始まるため、5行2列の配列なら最初の添字は 0〜4、2番目の添字は 0〜1 の範囲で指定します。二重のforループを組み合わせることで、すべての要素を効率よく走査できるのがポイントです。

  1. C/C++の多次元配列とは?基本概念から動的メモリ確保まで徹底解説

    C/C++における多次元配列とは、簡単に言えば「配列の配列」として定義されるデータ構造です。多次元配列では、データが表形式(行優先順/row-major order)でメモリ上に格納されます。 以下の図は、3×3×3の次元を持つ多次元配列のメモリ割り当て戦略を示したものです。 アルゴリズム 2次元配列を動的に確保し、操作するための基本的な手順は以下の通りです。 Begin 配列の次元を宣言する new演算子を使用して2次元配列 a[][] を動的に確保する 配列に要素を格納する 配列の内容を出力する deleteによってメモリを解放する End サン

  2. 【初心者向け】C/C++における多次元配列の初期化方法をわかりやすく解説

    多次元配列とは、次元数が2以上ある配列のことです。本記事では、3×3×3の多次元配列におけるメモリ割り当ての仕組みと、実際に配列を初期化して内容を表示するC++プログラムを紹介します。下図は、次元が3×3×3の多次元配列に対するメモリ割り当ての戦略を示したものです。アルゴリズム多次元配列を初期化するプログラムは、以下の手順で構成されます。Begin 多次元配列の要素を初期化する 配列のサイズを出力する 配列の内容を表示する Endサンプルコード以下は、2行2列の二次元配列を初期化し、そのサイズと内容を出力するC++プログラムです。#include<iostream