No.18 配列について(1)
今回は、C言語の配列について解説します。
前回の記事をまだ見ていない方は、下記のリンクからぜひ見てください。
前回の記事を見てからこの記事を見ると理解しやすいです。↓
また、わからない点があればぜひコメントお願いします。
わかりやすいように更新させていただきます。
配列とは
配列 というのは、同じ種類のものをたくさん収納できる引き出しのようなものです。
例えば、棚を想像してみてください。この棚には、書類が10冊入っているとします。この棚全体を「書類の棚」と呼ぶ代わりに、C言語では「書類の配列」と呼びます。
棚の1つ1つの引き出しは、書類1冊を収納する場所です。この引き出しにあたるものを、C言語では「要素」と呼びます。
配列を使うメリット
先程の棚の例でいうと
まとめて管理: 書類を1冊ずつ別の箱に入れる代わりに、一つの棚にまとめて入れることで、管理が楽になります。
アクセスが簡単: どの書類を取り出すか、棚の番号(インデックス)を指定するだけで簡単に取り出すことができます。
配列の書き方
配列の宣言
C言語で配列を宣言する際は、次のように書きます。↓
データ型 配列名[要素数];
データ型: 配列に格納するデータの型(int, char, doubleなど)
配列名: 配列の名前(任意)
要素数: 配列に含まれる要素の数
宣言と同時に行う代入
int ages[3] = {20, 25, 30};
上記のように、配列を宣言する際に、{ }で囲んで初期値を指定することができます。
後から値を代入する
int scores[5];
scores[0] = 80;
scores[1] = 75;
// ...
上記のように、各要素に個別に値を代入することも可能です。
C言語での例
5人の学生の数学のテストの点数を管理したいとします。
変数を使う場合:
int student1 = 80;
int student2 = 75;
int student3 = 90;
int student4 = 85;
int student5 = 95;
配列を使う場合:
int scores[5] = {80, 75, 90, 85, 95};
上記のように配列を使うことで次のようなメリットがあります。↓
コードの簡潔化: 変数をたくさん宣言する手間が省ける。
一括処理: for文などを使って、全ての点数に対して同じ処理を簡単に実行できる。
アクセスが簡単: scores[0] で1人目の点数、scores[1] で2人目の点数のように、インデックスを使って簡単にアクセスできる。
文字列を配列で扱う
文字列を配列で扱う場合には、先程の棚のイメージとは異なったものとなります。
イメージ例
C言語で文字列を扱うイメージを、皆さんがよく知っている「本棚」に例えて説明します。
本棚は、たくさんの本を収納する場所ですよね。C言語の文字列も、たくさんの文字を収納する場所と考えるとわかりやすいでしょう。
本棚: 文字の配列
本: 1文字
本棚の1段: 配列の1つの要素
例えば、「こんにちは」という文字列を本棚に収納する場合、それぞれの文字(「こ」「ん」「に」…)を、本棚の1段ずつに順番に置いていきます。
そして、本棚の最後の段には、特別な本(ヌル文字 ' \0 ')を置いて、本棚の終わりを示します。
なぜヌル文字が必要か?
本棚に本をたくさん並べたときに、どこまでが本で、どこからが空のスペースなのかを区別するために、最後の段に目印の本(ヌル文字)を置く必要があります。
コンピューターも、文字列の終わりをどこで判断すればいいのか、このヌル文字を見て判断しているのです。
プログラム例
char str[10] = "こんにちは";
このコードでは、str という名前の配列に、「こんにちは」という文字列を収納しています。
表でのイメージ
先程のプログラムを、表で表すと次のようになります。↓
配列を使ったプログラム例
#include <stdio.h>
int main() {
int numbers[5] = {10, 20, 30, 40, 50};
// 配列の要素を表示する
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
上記のプログラムは、配列 numbers に入っている数を出力するものです。↑
for文で変数 i を毎回1ずつ増加させることで、配列のインデックスを変えて numbers の内容を出力します。
配列のインデックスは変数をいれることもできます。
#include <stdio.h>
int main() {
char name[20];
printf("あなたの名前を入力してください: ");
scanf("%s", name);
printf("こんにちは、%sさん!\n", name);
return 0;
}
また、このプログラムは入力された名前を出力するものです。↑
scanf関数で入力された名前を配列 name に代入し、printf関数で出力します。
今回は以上です。