C 言語で配列を 0 に初期化する方法
Satishkumar Bharadwaj
2023年10月12日
このチュートリアルでは、C 言語で配列を 0
に初期化する方法を紹介します。
C 言語での配列の宣言は以下の通りです。
char ZEROARRAY[1024];
グローバルスコープでは実行時にすべて 0 になります。ローカル配列の場合は省略可能なメソッドがあります。宣言と初期化は以下のようになります。
char ZEROARRAY[1024] = {0};
配列が部分的に初期化されている場合、初期化されていない要素は該当するデータ型の値 0
を受け取ります。コンパイラは書き込まれていないエントリをゼロで埋めます。
イニシャライザが指定されていない場合、静的ストレージを持つオブジェクトは 0 に初期化されます。宣言は以下の通りです。
static int myArray[10];
初期化子リストが空か、初期化子リストに 0 が指定されている場合、配列は 0 に初期化されます。宣言は以下のようになります。
int number[5] = {};
int number[5] = {0};
配列を初期化する最も簡単な方法は、すべての要素をループして 0
にすることです。
#include <stdio.h>
int main(void) {
int numberArray[10], counter;
for (counter = 0; counter < 5; counter++) {
numberArray[counter] = 0;
}
printf("Array elements are:\n");
for (counter = 0; counter < 5; counter++) {
printf("%d", numberArray[counter]);
}
return 0;
}
出力:
Array elements are:
00000
C ライブラリ関数 memset()
を使用する
関数 memset()
は string.h
のライブラリ関数です。メモリのブロックを特定の値で満たすために用います。
関数 memset()
の構文は以下の通りです。
void *memset(void *pointerVariable, int anyValue, size_t numberOfBytes);
ここでは、
pointerVariable
はメモリブロックへのポインタです。anyValue
は設定する値です。これは整数値であるが、この関数はこの値の符号なし文字列変換を用いてメモリブロックを埋めます。numberOfBytes
は値に設定するバイト数です。
この関数はメモリ領域 pointerVariable
へのポインタを返します。
完全なプログラムは次のとおりです。
#include <stdio.h>
#include <string.h>
void printArrayvalues(int anyArray[], int anyNumber) {
int index;
for (index = 0; index < anyNumber; index++) printf("%d ", anyArray[index]);
}
int main(void) {
int number = 10;
int arrayValues[number];
memset(arrayValues, 0, number * sizeof(arrayValues[0]));
printf("Array after memset()\n");
printArrayvalues(arrayValues, number);
return 0;
}
出力:
Array after memset()
0 0 0 0 0 0 0 0 0 0
配列を 0
以外の値に初期化する
配列を gcc
で 0
以外の値に初期化する方法は以下の通りです。
int myArrayValues[1024] = {[0 ... 1023] = -1};
配列の各メンバは、次元を省略することで明示的に初期化することができます。宣言は以下のようになります。
int myArrayValues[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
コンパイラは初期化リストから次元を推測し、多次元配列の場合は一番外側の次元のみを省略することができます。
int myPoints[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};