C言語の配列を0埋めするときは

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C言語において、配列を自動変数として生成した時に0で埋めたいときが往々にしてあるが、その際にはどのようにすれば良いのだろうか。ここでは、その方法とそれぞれの特徴について説明を行ってみたい。

forループを使って0埋めする方法

これはforループを使って0で埋める方法で、forループさえ知っていれば簡単に対処できてしまうというのが特徴である。サンプルコードは以下の通りである。

#include <stdio.h>

int main()
{
    static const int ARR_SIZE = 1024; 
    int arr[ARR_SIZE];
    for (int i = 0; i < ARR_SIZE; i++) {
        arr[i] = 0;
    }
    return 0;
}

上記の場合は、C言語においては定数が必要だが、明示的に範囲がわかるというのが特徴で、初心者であればこれで十分配列の0埋めが可能である。

memsetを使って0埋めをする方法

次にmemsetを使って0で埋める方法を説明する。こちらはforループを使わないですむ分、コード数を減らすことができる。サンプルコードは以下の通りである。

#include <stdio.h>
#include <string.h>

int main()
{
    static const int ARR_SIZE = 1024; 
    int arr[ARR_SIZE];
    memset(arr, 0, sizeof(arr));
    return 0;
}

こちらはmemsetの仕様上、直感的には若干わかりづらい部分があり、なおかつ0以外で埋める場合は要注意な部分があるが、0埋めであれば問題なく行えるだろう。

それぞれのパフォーマンスについて

こちらで実測したのだが、どちらにおいても実際の動作上のパフォーマンスはそれほど変わらないという状況である。従って、forループで回して0埋めしても、memsetを使って0埋めしても大差ないという状態だろう。

それを考えれば、わかりやすいという意味ではforループを、コード数を減らしたいというのであればmemsetを使えば良いだろう。

最後に

今回はC言語で配列の中身を0埋めするときの方法を説明したが、それぞれの方法は是非とも覚えておきたい。とはいえ、実際問題としてパフォーマンス上大きな違いはないので、どちらを使っても問題ないのだが・・・。

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