こんなお悩みにお答えします。
記事の内容
- C言語の配列とは何か?
- 配列の使い方
- 配列の初期化・値の格納方法
配列とは?
配列とは複数の数字や文字をまとめて保存しておくためのものです。
例えば「HELLO」という文字列を保存したいとします。
文字列とは「HELLO」のように複数の文字を並べたもののことです。
char型の変数には文字を代入できますが、変数1つに対して「H」や「E」などの1文字しか代入できません。
配列なら「HELLO」という複数の文字をまとめて代入できます。
1つの配列に格納する値のデータ型はすべて同じである必要があります。格納されたデータ1つ1つには番号が付けられており、順番に管理できます。
配列の使い方
配列の使い方
宣言だけの場合
データ型 配列名[要素数];
初期化も一緒に行う場合
データ型 配列名[要素数]={値1,値2,値3,...};
値1つ1つを要素といい、要素の数を要素数と呼びます。
要素数は[ ]で囲って書きます。初期化する際には要素を{ }内で囲い、カンマ「,」で区切って1つずつ書きます。
文字列を代入
例:
#include <stdio.h> void main() { char moji[6]={'H','E','L','L','O','\0'}; //① printf("moji=%s\n",moji); //② }
実行結果
moji=HELLO
①では配列mojiに「HELLO」と代入しています。初期化の際、文字1つ1つは' 'で囲います。
「\0」はNULL文字と呼ばれるもので、「ここが文字列の終端ですよ」という意味です。面倒ですがC言語では文字列の最後にNULL文字を付ける決まりになっています。
moji[6]の6は配列の要素数です。配列mojiは「HELLO」で5文字、NULL文字1つで合わせて6つの要素からなっています。NULL文字分、要素数が1増えるので注意です。
実はNULL文字を使わず「char moji[5]={'H','E','L','L','O'};」と書いてもエラーは出ず、実行結果も変わりません。しかし後々予想不可能なエラーが出る可能性があります。必ず正しい方法で初期化してください。
②では配列mojiを表示させています。配列のフォーマット指定子は%sです。
配列の要素
配列の要素は1つ1つには番号がついています。最初の要素は0、次が1というように続きます。
要素1つ1つを取り出すこともできます。
例:
#include <stdio.h> void main() { char moji[6]={'H','E','L','L','O','\0'}; printf("moji[0]=%c\n",moji[0]); printf("moji[1]=%c\n",moji[1]); printf("moji[2]=%c\n",moji[2]); printf("moji[3]=%c\n",moji[3]); printf("moji[4]=%c\n",moji[4]); }
実行結果
moji[0]=H
moji[1]=E
moji[2]=L
moji[3]=L
moji[4]=O
文字列でなく、1つの文字なのでフォーマット指定子は%cになります。
表示したい要素はmoji[0]のように配列名と[ ]で囲った要素番号を書いて指定します。
数字を代入
例:
#include <stdio.h> void main() { int num[3]={1,2,3}; printf("num[0]=%d\n",num[0]); printf("num[1]=%d\n",num[1]); printf("num[2]=%d\n",num[2]); }
実行結果
num[0]=1
num[1]=2
num[2]=3
データ型はintなど数字用のものを使います。数字の配列にはNULL文字は必要ありません。
フォーマット指定子は変数の時と同じように整数なら%d、浮動小数点実数なら%fなどを使います。
数字の配列にはフォーマット指定子%sが使えません。123を表現したければ変数を使って「int a=123;」のように書けばOKです。
配列の初期化・値の代入方法いろいろ
配列の初期化には複数の方法があります。
文字列の初期化
例:
#include <stdio.h> void main() { //方法1 char moji1[4]={'a','b','c','\0'}; //方法2:NULL文字省略 char moji2[4]={'a','b','c'}; //方法3:さらに省略 char moji3[]="abc"; //方法4:1要素ずつ代入 char moji4[4]; moji4[0]='a'; moji4[1]='b'; moji4[2]='c'; moji4[3]='\0'; //表示 printf("moji1=%s\n",moji1); printf("moji2=%s\n",moji2); printf("moji3=%s\n",moji3); printf("moji4=%s\n",moji4); }
実行結果
moji1=abc
moji2=abc
moji3=abc
moji4=abc
方法2と3ではNULL文字を書いていませんが、最後の要素に自動的にNULL文字が入ります。
初期化の方法はどれでもOKです。結果はすべて同じになります。
数字の初期化
例:
#include <stdio.h> void main() { //方法1 int num1[3]={1,2,3}; //方法2:要素数なし int num2[]={1,2,3}; //方法3:1要素ずつ代入 int num3[3]; num3[0]=1; num3[1]=2; num3[2]=3; //表示 printf("num1=%d\n",num1); printf("num2=%d\n",num2); printf("num3=%d\n",num3); }
実行結果
num1=123
num2=123
num3=123
どれも結果は同じなので用途に合った方法で初期化します。
おわりに:配列を使う場面
配列は同じ属性の数字や文字などをまとめて管理するのによく使います。
例えば生徒30人分のテストの点を管理したい時、「int score1=80, score2=60,...」のように30個の変数を作るのは大変ですよね。配列なら「int score[30]={80,60,...」と1つの配列でまとめて管理できて便利です。
状況に合わせて変数と配列を使い分けてみてください。