web-dev-qa-db-ja.com

{0}、{0、}を使用した配列の初期化?

MyArrayを初期化したいとします

char myArray[MAX] = {0};  
char myArray[MAX] = {0,};  
char myArray[MAX]; memset(myArray, 0, MAX);  

それらはすべて等しいか、他のものよりも優先されますか?

ありがとうございました

33
eugene

配列が{0}構文、明示的に指定されていないすべての値は暗黙的に0で初期化され、コンパイラーはmemsetへの呼び出しを挿入するのに十分なことを知っています。

したがって、唯一の違いはスタイルです。どちらを選択するかは、使用するコーディング標準、または個人的な好みによって異なります。

21

実際、私は個人的にお勧めします:

char myArray[MAX] = {};

それらはすべて同じことを行いますが、私はこの方が好きです。それは最も簡潔です。 = D

ちなみに、_char myArray[MAX] = {1};が実行することに注意してくださいnotすべての値を1に初期化します!最初の値を1に初期化し、残りをゼロに初期化するだけです。このため、char myArray[MAX] = {0};は、正しく機能しても、誤解を招く可能性があるため、作成しないことをお勧めします。

33
Mehrdad

最初の解決策が最善だと思います。

char myArray[MAX] = {0};  //best of all
4
Nawaz

どちらでも使用できます

しかし、以下の方が理解しやすく、読みやすいと思います。

  char myArray[MAX]; 
  memset(myArray, 0, MAX);
1
Jhaliya

常に0で初期化することを想定しています。

->最初の方法と2番目の方法は同じです。私は1番目が好きです。

->初期化以外の0を割り当てる場合は、memset()の3番目の方法を使用する必要があります。

->この配列が1回だけ初期化されることが予想される場合は、その前にstaticキーワードを配置して、コンパイラーが代わりにジョブを実行するようにすることができます(ランタイムオーバーヘッドなし)。

1
iammilind

Bzero fn(ゼロ値のバイトを書き込む)も使用できます

#include <strings.h>
void bzero(void *s, size_t n)

http://linux.die.net/man/3/bzero

0