[C言語]配列を同じ値で初期化するには?

C言語

どうも、ちょげ(@chogetarou)です。

配列(array)を同じ値で初期化する方法を紹介します。

スポンサーリンク

方法

配列(array)を同じ値で初期化する方法は、2つあります。

ループ

ひとつは、ループを使う方法です。

まず、要素数を指定して配列を宣言します。

宣言した配列のインデックスをループします。

そして、ループ処理で、配列の全てのインデックスの要素に値を代入します。

//T=要素の型, myArray=配列名, length=要素数, value=値
T myArray[length];
int n = sizeof(myArray) / sizeof(myArray[0]);
for (int i = 0; i < n; i++) {
    myArray[i] = value;
}
//whileの場合
T myArray[length];
int n = sizeof(myArray) / sizeof(myArray[0]);
int i = 0;
while (i < n) {
    myArray[i] = value;
    ++i;
}

上記のループは、配列を全て同じ値で初期化します。

使用例

#include <stdio.h>

int main(void){
    char myArray[5];
    int n = sizeof(myArray) / sizeof(myArray[0]);
    for (int i = 0; i < n; i++) {
        myArray[i] = 'a';
    }
    
    
    for (int i = 0; i < n; i++) {
        printf("%c,", myArray[i]);
    }
    
    return 0;
}
出力:
a,a,a,a,a,

使用例2

#include <stdio.h>

int main(void){
    char myArray[5];
    int n = sizeof(myArray) / sizeof(myArray[0]);
    int i = 0;
    while (i < n) {
        myArray[i] = 'w';
        ++i;
    }
    
    
    for (int i = 0; i < n; i++) {
        printf("%c,", myArray[i]);
    }
    
    return 0;
}
出力:
w,w,w,w,w,

memset() (*Char型の配列限定)

もうひとつは、memset()を使う方法です。

まず、要素数を指定した配列を宣言します。

次に、memset()を呼び出します。

memset()の第1引数に対象の配列、第2引数に値、第3引数にsizeof()を指定します。

そして、sizeof()の引数に、宣言した配列を指定します。

//T=要素の型, myArray=配列名, length=要素数, value=値
T myArray[length];
memset(myArray, value, sizeof(myArray));

上記のmemset()は、Charの配列を同じ値で初期化します。

使用例

#include <stdio.h>

int main(void){
    char myArray[5];
    memset(myArray, 'g', sizeof(myArray));
    
    int n = sizeof(myArray) / sizeof(myArray[0]);
    for (int i = 0; i < n; i++) {
        printf("%c,", myArray[i]);
    }
    
    return 0;
}
出力:
g,g,g,g,g,

まとめ

配列(array)を同じ値で初期化する方法は、次の2つです。

  • ループを使う方法
    T myArray[length];
    int n = sizeof(myArray) / sizeof(myArray[0]);
    for (int i = 0; i < n; i++) { myArray[i] = value; }
  • memset()を使う方法(char型の配列限定)
    T myArray[length];
    memset(myArray, value, sizeof(myArray));

コメント

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