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埋めするときの方法を説明したが、それぞれの方法は是非とも覚えておきたい。とはいえ、実際問題としてパフォーマンス上大きな違いはないので、どちらを使っても問題ないのだが・・・。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。