C言語,配列の指定した要素に値を設定し、それ以外を0で初期化する

スポンサーリンク

鍛錬 237

C言語,配列の指定した要素に値を設定し、それ以外を0で初期化する

配列の初期化を行う際、指定した要素に初期値を設定して、それ以外の要素を 0 で初期化する方法についてです。

使用例は、以下に示す通りです。

以下の初期化を行うと、要素番号 6 と 18 に初期値が設定され、それ以外は 0 で初期化されます。

int tmp[256] = {[6] = 123, [18] = 456};

実際に確認 (初期化しない場合)

以下は、宣言時に初期化しない場合のプログラム、array.c です。

// include
#include <stdio.h>

// main
int main(void)
{
	int tmp[32];
	int i;
	
	for (i = 0; i < 32; i++)
		printf("%2d = %d\n", i, tmp[i]);
	
	return 0;
}

 
以下は、上記プログラム array.c を実行しています。

初期化していないため、乱雑なデータが格納されています。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra array.c -o array
***@ubuntu:~/***/test/c$ ./array
 0 = 0
 1 = 0
 2 = 1871575750
 3 = 32525
 4 = 1
 5 = 0
 6 = 0
 7 = 0
 8 = 1
 9 = 0
10 = 1867605008
11 = 32525
12 = -1069052800
13 = 32765
14 = 1871609583
15 = 32525
16 = 65280
17 = 0
18 = 0
19 = 0
20 = 1
21 = 0
22 = 4195933
23 = 0
24 = 0
25 = 0
26 = 0
27 = 0
28 = 4195856
29 = 0
30 = 4195488
31 = 0

実際に確認 (初期化した場合)

以下は、指定した要素に初期値を設定して、それ以外の要素を 0 で初期化するプログラム、array_init.c です。

今回は、要素番号 6 の初期値に 123 を、要素番号 18 の初期値に 456 を設定して、それ以外を 0 で初期化しています。

// include
#include <stdio.h>

// main
int main(void)
{
	int tmp[32] = {[6] = 123, [18] = 456};
	int i;
	
	for (i = 0; i < 32; i++)
		printf("%2d = %d\n", i, tmp[i]);
	
	return 0;
}

 
以下は、上記のプログラム array_init.c を実行して、配列の初期化を確認しています。

要素番号 6 と 18 にそれぞれ指定した初期値が設定され、それ以外は 0 で初期化されていることが分かります。

***@ubuntu:~/***/test/c$ 
***@ubuntu:~/***/test/c$ gcc -Wall -Wextra array_init.c -o array_init
***@ubuntu:~/***/test/c$ ./array_init
 0 = 0
 1 = 0
 2 = 0
 3 = 0
 4 = 0
 5 = 0
 6 = 123
 7 = 0
 8 = 0
 9 = 0
10 = 0
11 = 0
12 = 0
13 = 0
14 = 0
15 = 0
16 = 0
17 = 0
18 = 456
19 = 0
20 = 0
21 = 0
22 = 0
23 = 0
24 = 0
25 = 0
26 = 0
27 = 0
28 = 0
29 = 0
30 = 0
31 = 0
スポンサーリンク

シェアする

フォローする