スポンサーリンク

変数・配列・文字配列 初期化の説明

配列と文字配列の初期化について

これまで変数宣言【 int 】(整数型) 【 float 】(実数型) 【 double 】(実数型) 【 char 】(文字列型)を色々と勉強して参りましたが、変数を宣言する場合に初期値を決定出来ます。これを初期化といいます。または初期値と言います。

初期化サンプル
※【 printf 】による出力は初期化の値を確認する為です。特に深い意味は有りません。

#include <stdio.h>
int main(void)
{int a = 1;
float b = 2.00;
double c = 3.00;
char d = ‘A’;printf(“intの初期値 %d \n”,a);
printf(“floatの初期値 %f \n”,b);
printf(“doubleの初期値 %f \n”,c);
printf(“charの初期値 %c \n”,d);return 0;}

解説
初期化は変数宣言と共に値を書きます。例【 int a = 100; 】
余り深く考える必要はありません。

実行結果

配列の初期化

前回は変数の初期かに付いて勉強してみました。今回は配列及び文字配列の初期かを勉強してみたいと思います。左程重要では無いのですが、今後使う場合があるので目を通しておいて下さいね。

変数の初期化の場合は 例【 int a = “123”; 】変数に直接代入する形なのでわかりやすいですが、
配列 文字配列の場合は 例【 int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 】 { } を用いるのが特徴です。
※入力した初期値は任意の数字でOKです。

配列宣言をすると 例【 a[10] 】の場合には以下のように変数が用意され、それぞれ初期値が代入されます。

a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
1 2 3 4 5 6 7 8 9 10

配列の初期化サンプル
※【 printf 】による出力は確認の為です。

#include <stdio.h>
int main(viod)
{int a[5] = {1, 2, 3, 4, 5};printf(“a[0]=%d\n”,a[0]);
printf(“a[1]=%d\n”,a[1]);
printf(“a[2]=%d\n”,a[2]);
printf(“a[3]=%d\n”,a[3]);
printf(“a[4]=%d\n”,a[4]);return 0;
}

ソースコードの解説

実行結果

文字配列の初期化

文字列型変数宣言【 char 】文字配列の初期化
ます基本の二通りから
文字コードを直接書く方法 例【 char e[6] = {65, 66, 67, 68, 69, 0}; 】文字列終端マークの0が最後に必ず入ります。
文字を直接書く方法 例【 char f[6] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’}; 】

上記の文字配列初期化表
※水色行の部分は文字コードになります。

e[0]
f[0]
e[1]
f[1]
e[2]
f[3]
e[4]
f[4]
e[5]
f[5]
e[6]
f[6]
65 66 67 68 69 0
A B C D E \0

サンプルソースコード

#include <stdio.h>
int main(void)
{
char e[6] = {65, 66, 67, 68, 69, 0};
char f[6] = {‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘\0’};printf(“%c”,e[0]);
printf(“%c”,e[1]);
printf(“%c”,e[2]);
printf(“%c”,e[3]);
printf(“%c”,e[4]);
printf(“%c\n”,e[5]);printf(“%c\n”,f[0]);
printf(“%c\n”,f[1]);
printf(“%c\n”,f[2]);
printf(“%c\n”,f[3]);
printf(“%c\n”,f[4]);
printf(“%c\n”,f[5]);
return 0;
}

解説。(重要なポイントの説明があるのでここでは解説図は有りません。)
【 char e[6] 】の初期値数値の出力には最後に【 \n 】にて改行し【 char f[6] 】の出力に付いてはに付いては、それぞれ【 \n 】にて改行をしております。

上記の実行結果です。

文字列専用の初期化方法

ここまでは基本初期化の方法を勉強してまいりました。今度は文字列専用の初期化方法に付いて説明させていただきたいと思います。
例 【 char e[6] = “ABCDE”; 】これでe[0]~e[4]文字列の初期化になります。
※e[5]には文字終端マーク【 0 】が必ず入ります。【 char e[6] = “ABCDEF”; 】とするとエラーになります。

e[0] e[1] e[2] e[4] e[5] e[6]
A B C D E 0

例2 【 char f[6] = “ABC”; 】の場合、f[0]~f[2]まで初期化され余った配列は【 0 】が代入されます。

f[0] f[1] f[2] f[4] f[5] f[6]
A B C 0 0 0

配列の添字(長さを決める)を省略する方法

例 【 char g[] = “ABCD”; 】この場合適切な配列を確保してくれます。
通常の変数の場合もこの省略方法を使う事が可能です。

例2 【 char g[] = {‘A’, ‘B’, ‘C’, ‘D’}; 】
以下のように確保&初期化されます。

g[0] g[1] g[2] g[3] g[4]
A B C D 0

例3 【 int a[] = {1, 2, 3, 4}; 】
以下のように確保&初期化されます。

a[0] a[1] a[2] a[4]
1 2 3 4

ループ for を使って配列にデータを入力する

forループの説明はリンク先を参照

ここではループ「for」を使って配列にデーターを入れる勉強をしてみたいと思います。

サンプルは 0~19までの数字に対して、2乗、3乗を計算し、一度配列変数に格納したうえで画面表示させるものです。

#include <stdio.h>
main()
{
int i;
int nij[20],sanj[20];for(i=0; i<=19; i++){
nij[i]=i*i;
sanj[i]=i*i*i;
}printf(“数  2乗  3乗\n”);for(i=0; i<=19; i++){
printf(“%2d %4d %4d”,i,nij[i],sanj[i]\n);
}

}

ソースの解説
ループに使う【 i 】を宣言し、次に【 for 】でループさせる回数分の配列を宣言します。fouのループ条件は【 i 】に0を代入しているので『 for(i=0; i<=19; i++) 』0を一回とし19回までループするので、配列をそれぞれ 【 nij[20],sanj[20] 】としています。
【 i 】がループしてインクリメント(加算)していく数字を 【 nij[i]=i*i 】(2乗)と【 sanj[i]=i*i*i 】(3乗)の配列に代入させて、ループ終了時に【 printf 】で出力させます。出力には【 nij[i]=i*i 】(2乗)と【 sanj[i]=i*i*i 】(3乗)の配列を出力するようにしていますので、下記の出力結果になります。
※【 %2d 】や【 %4d 】の意味に付いてはここを参照してください。

出力結果

※【 %2d 】や【 %4d 】の意味に付いて

通常整数を【 printf 】で出力する場合は【 %d 】を利用しますが、上記の表示結果と下記の表示結果を見て頂くとすぐわかると思います。
【 %2d 】は2文字幅で数字を出力【 %4d 】は4文字幅で数字を出力して欲しい時に使います。

表示幅サンプル

%d %2d %4d
1 1 100
10 11 1256
100 23 2365
1000 35 3120
10000 68 5580

上記ソースの一番最後の出力の所を、【 %d 】『printf(“%d %d %d\n”,i,nij[i],sanj[i]);』で書いてみた出力結果です。

まとめ

文字列配列の初期化&変数配列の初期化サンプルです。
※【 char 】の変換文字列例 は 【 %s 】文字列として出力できるものを使用。一文字づつ出力する場合は
例 char s[5]の場合 【 printf(“%c”,s[0]) 】~【 printf(“%c”,s[4]) 】とすればOKです。
【 printf 】の出力は、あくまでも初期設定数値を確認するためのもので余り気にされる必要はありません。

#include <stdio.h>
int main(void)
{
int a[3] = {1, 2, 3};
int b[] = {11, 12, 13, 14};
char s[5] = “ABCD”;
char ss[] = “abcd”;
printf(“a[0]=%d a[1]=%d a[2]=%d\n”,a[0],a[1],a[2]);
printf(“b[0]=%d b[1]=%d b[2]=%d b[3]=%d\n”,b[0],b[1],b[2],b[3]);
printf(“%s\n”,s);
printf(“%s”,ss);return 0;
}

解説
特に難しくは無いのですが、今までの事を一通り読んでいただくと理解して頂けると思います。
基本初期化と配列長省略がポイントです。

実行結果

コメント

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