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

C++の配列をマスターしよう!基礎知識と練習問題集

配列(Array)とは

配列とは、連続したメモリ領域にデータを格納するデータ構造です。同じ型の複数の要素をインデックスで管理できるため、大量のデータを効率的に扱うことができます。

配列の宣言方法

C++では、以下の構文で配列を宣言します。

int arr1D[];    // 1次元配列の場合
int arr2D[][];  // 2次元配列の場合

重要なポイントとして、宣言時に要素数より少ない個数の値で配列を初期化した場合、残りの要素は自動的に0で初期化されます。この挙動は後述の練習問題でも登場します。

配列要素のメモリアドレス計算

配列の各要素が格納されているメモリアドレスは、次の式で求めることができます。

1次元配列:address[i] = baseAddress + i × size
2次元配列(行優先):address[i][j] = baseAddress + (i × n + j) × size
  • baseAddress:配列の先頭要素のアドレス
  • size:1要素あたりのバイト数(int型の場合、環境により2または4バイト)
  • n:2次元配列の列数

練習問題に挑戦

それでは、実際に練習問題を解いて理解を深めましょう。

問題1:出力を予想する

次のコードスニペットの出力を予想してみてください。

int arr[5] = {6, 9};
for(int i = 0; i<5; i++)
    cout<<arr[i]<<" ";

出力結果

6 9 0 0 0

解説:この配列は2つの値(6と9)のみで初期化されているため、残りの3つの要素は自動的に0で初期化されます。その結果が出力にも反映され、後半に0が並んでいます。

問題2:2次元配列の要素アクセス

次のコードの出力を予想してみてください。

int arr[][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
cout<<arr[1][2];

出力結果

6

解説:9つの値は3つずつ行に分割され、{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}} という2次元配列として解釈されます。arr[1][2]は、インデックス1の行(2行目)のインデックス2の要素、つまり6を指します。

問題3:メモリアドレスの計算

整数型配列の指定された要素のアドレスを求めてください。ただし、ベースアドレスは1420、int型のサイズは2バイトとします。

【1次元配列の場合】arr[43]
address = 1420 + 43 × 2 = 1506

【2次元配列の場合】arr[10][10] の arr[5][4](行優先で格納)
address = 1420 + (5 × 10 + 4) × 2 = 1420 + 54 × 2 = 1528

解説:配列のアドレス計算は、ベースアドレスにオフセット(インデックス × 要素サイズ)を加算して行います。2次元配列を行優先(row major)方式で扱う場合は、「対象の行より前の全要素数 + 列インデックス」をオフセットとして使用する点に注意しましょう。

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

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

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

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