Cで配列を初期化する
この記事では、C言語で配列を初期化する方法について見ていきます。
これを行うための様々な方法がありますので、順番にリストに挙げていきます。始めましょう!
方法1:イニシャライザリストを使用して配列を初期化する
イニシャライザリストは、リストの順序で配列の要素を初期化します。
たとえば、以下のスニペットを考えてみましょう。 (Tatoeba, ika no sunipetto o kangaetemimashou.)
int arr[5] = {1, 2, 3, 4, 5};
このコードは、要素が{1、2、3、4、5}の順に配置されたサイズ5の配列を初期化します。
これは、arr[0]は1、arr[1]は2、そしてそのように続くことを意味します。
0から4までの要素をすべて初期化する必要はありません。0から2までのインデックスだけでも実行できます。
以下のコードも有効です。
int arr[5] = {1, 2, 3};
しかし、今、arr[4]とarr[5]はまだゴミの値のままですので、注意が必要です。
イニシャライザーリストを使用する場合、すべての要素を含めれば、配列のサイズを指定する必要はありません。
// Valid. Size of the array is taken as the number of elements
// in the initializer list (5)
int arr[] = {1, 2, 3, 4, 5};
// Also valid. But here, size of a is 3
int a[] = {1, 2, 3};
すべての要素を0で初期化したい場合、そのためのショートカットがあります(ただし、0のみの場合)。単にインデックスを0と指定するだけで構いません。
#include <stdio.h>
int main() {
// You must mention the size of the array, if you want more than one
// element initialized to 0
// Here, all 5 elements are set to 0!
int arr[5] = {0};
for (int i=0; i<5; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
出力
0
0
0
0
0
もし多次元配列を使用している場合、配列は行優先の方法で保存されているため、すべてを1つのブロックで初期化することができます。
#include <stdio.h>
int main() {
int arr[3][3] = {1,2,3,4,5,6,7,8,9};
for (int i=0; i<3; i++)
for (int j=0; j<3; j++)
printf("%d\n", arr[i][j]);
return 0;
}
結果を出力する。
1
2
3
4
5
6
7
8
9
同様の方法は、float、char、char*などの他のデータ型にも適用することが可能です。
#include <stdio.h>
int main() {
// Array of char* elements (C "strings")
char* arr[9] = { "Hello", [1 ... 7] = "JournalDev", "Hi" };
for (int i=0; i<9; i++)
printf("%s\n", arr[i]);
return 0;
}
出力
Hello
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
JournalDev
Hi
覚えておいてください、[1 … 7] = “Journaldev” という方法はすべてのコンパイラで動作しないかもしれません。私はLinuxのGCCで作業しています。
方法2:C言語のforループを使用して配列を初期化する
配列の要素を設定するためにも、forループを使用することができます。
#include <stdio.h>
int main() {
// Declare the array
int arr[5];
for (int i=0; i<5; i++)
arr[i] = i;
for (int i=0; i<5; i++)
printf("%d\n", arr[i]);
return 0;
}
出力する
0
1
2
3
4
方法3:指定された初期化子を使用する(gccコンパイラの場合のみ)
もしCコンパイラとしてgccを使用している場合、指定イニシャライザを使用して、配列の特定範囲に同じ値を設定することができます。
// Valid only for gcc based compilers
// Use a designated initializer on the range
int arr[9] = { [0 ... 8] = 10 };
数値と数値の間にはスペースがあることと、3つのドットが存在することに注意してください。それ以外の場合、コンパイラは小数点と誤解しエラーを発生させる可能性があります。
#include <stdio.h>
int main() {
int arr[9] = { [0 ... 8] = 10 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
return 0;
}
出力(gccのみ)
10
10
10
10
10
10
10
10
10
私たちは、これを私たちの古い初期化リストの要素と組み合わせることもできます!
たとえば、他の要素はすべて10に初期化される中で、配列のインデックスarr[0]とarr[8]だけを0に設定しています。
#include <stdio.h>
int main() {
int arr[9] = { 0, [1 ... 7] = 10, 0 };
for (int i=0; i<9; i++)
printf("%d\n", arr[i]);
return 0;
}
出力
0
10
10
10
10
10
10
10
0
結論
この記事では、異なる方法を使用してCの配列を初期化する方法を学びました。
同様の記事については、Cプログラミングのチュートリアルセクションを是非ご覧ください。