--- [PR] 当サイトはアフィリエイト広告による収益を得ています。---

【C言語】配列って、なに?

プログラミング
この記事は約6分で読めます。

C言語プログラミングにおける基本を自分のメモも兼ねて作成しています。
プログラミングの基本ともいわれるC言語での考え方を押さえておくと、いずれはどんな言語を扱うようになっても通用できるようになります!

1. はじめに

プログラミングの世界では、データを効率的に扱うために「配列」という概念がよく使用されます。
C言語における配列を理解することは、プログラミングスキルを向上させるための基本になります。
この記事では、配列の基本から始めて、C言語での配列の使い方を紹介します。

2. 配列とは?

配列は、同じ目的をもった同じ型の複数の変数を1つの名前で管理するためのデータ構造です。
イメージとしては、たくさんの引き出しが並んだ棚のようなものであり、各引き出しには、データが1つずつ格納されています。
例えば、クラスの生徒たちのテストの点数を記録する場合、各生徒の点数を個別の変数として保持するのではなく、配列を使って一括で管理することができます。

このように、同じ型・サイズの箱(引き出し)が用意され、個々に別々のデータを格納することができます。

3. C言語での配列の宣言

C言語で配列を宣言するには、以下のように型名に続けて角括弧内にサイズを記述します。

10人分の生徒のテスト成績を管理したい

int scores[10];                    // 10人分の点数を格納する整数型の配列

このコードは、「int型のデータを10個格納できる配列」を宣言しています。

4. 配列の使用

配列に値を代入するには、インデックスを使用します。
インデックスは「0」から始まります。(ゼロオリジン)

int scores[10];                     // 10人分の点数を格納する整数型の配列

scores[0] = 85;                     // 1人目の点数を85点に設定
scores[1] = 90;                     // 2人目の点数を90点に設定

配列の要素を取得するときも、インデックスを使用します。

int firstScore = scores[0];      // 1人目の点数を取得

5. 配列へのアクセス

配列の全ての要素に対して操作を行うには、ループ(例:for文)等を使うと便利です。

// すべての要素に値を代入する例
int i;                                    // ループカウンタ用変数
for(i = 0; i < 10; i++)
{
   scores[i] = i * 2;                     // 各生徒の点数を設定
}

// すべての要素から値を取り出す例
int p;                                    // ループカウンタ用変数
int pdata[10];                            // 取り出した値を格納する配列
for(p = 0; p < 10; p++)
{
   pdata[p] = scores[p];                  // 各生徒の点数を取り出し
}

6. 使用例

以下は、5人の生徒の数学と英語の点数を管理する例です。

#include <stdio.h>

int main()
{
   int mathScores[5] = {70, 65, 85, 90, 75};
   int englishScores[5] = {80, 70, 90, 85, 80};
   int i;

   for(i = 0; i < 5; i++)
   {
      printf("生徒%d: 数学 %d点, 英語 %d点\n", i + 1, mathScores[i], englishScores[i]);
   }

   return 0;
}
出力結果

生徒1: 数学 70点, 英語 80点
生徒2: 数学 65点, 英語 70点
生徒3: 数学 85点, 英語 90点
生徒4: 数学 90点, 英語 85点
生徒5: 数学 75点, 英語 80点

以下のように、平均点を求めることも簡単になります。

#include <stdio.h>

int main()
{
   int mathScores[5] = {70, 65, 85, 90, 75};
   int englishScores[5] = {80, 70, 90, 85, 80};
   int mathTotal;              // 数学合計点を格納する変数
   int englishTotal;           // 英語合計点を格納する変数
   int i;

   mathTotal = 0;
   englishTotal = 0;
   for(i = 0; i < 5; i++)
   {
      mathTotal  += mathScores[i];            // 各要素の値を加算していく
      englishTotal += englishScores[i];       // 各要素の値を加算していく
   }
   printf("生徒人数 %d人\n", i );
   printf("数学合計 %d点, 英語合計 %d点\n", mathScores[i], englishScores[i]);
   printf("数学平均 %d点, 英語平均 %d点\n", ( mathTotal  / i ), ( englishTotal / i ));

   return 0;
}
出力結果

生徒人数 5人
数学合計 385点, 英語 405点
数学平均 77点, 英語 81点

7. int型だけではない

配列は、どんな型であっても可能です。
例えば、以下は文字列をメモリ上に格納する例です。

#include <stdio.h>
#include <string.h>

int main()
{
   char data[6];                     // char型のdata変数を10個並べる(文字列など)

   // 文字列を代入する「HELLO」
   data[0] = 'H';
   data[1] = 'E';
   data[2] = 'L';
   data[3] = 'L';
   data[4] = 'O';

   // 文字列操作の場合、「memcpy()」「strcpy()」関数が便利
   memcpy(data, "HELLO", 5);         // data格納領域の最初から「HELLO」と代入する
   strcpy(data, "HELLO");                // data格納領域の最初から「HELLO」と代入する

   return 0;
}

このように、配列の要素を指定して1つずつ格納する方法のほかにも、C言語標準関数を使用して連続代入することもできます。

memcpy、strcpyについては、使い方に注意があります。
以前のブログで紹介しています。

8. まとめ

この記事では、C言語における配列の基本について紹介しました。
配列はC言語における基本的なデータ構造のひとつであり、同じ型である多数のデータを効率的に管理するのに非常に役立ちます。
プログラミング的思考要素としても非常に重要な概念で、この基礎を理解することにより複雑なデータ構造やアルゴリズムへの理解を深めることができます。
是非色々なデータ構造の配列を使いこなしてみてください。

コメント

タイトルとURLをコピーしました