const配列のデフォルト値(すべてのインデックスが明示的に設定されていない場合)?

私は周りを検索し、これに対する答えを見つけていない。私が知りたいのはこれです:

If I declare a static unsigned char const ARRAY[256] = { [0] = };, can I expect the unspecified elements (in this case all but the element at index 0) to have a certain value, or will they be random?

私は、すべての要素が満たされていない一定のルックアップテーブルのためにこれを必要としますが、大きすぎないので、スペースを無駄にすることは問題ではありません。

より適切なデータ型や慣習に関する提案は大歓迎です。

ありがとう!

0

3 答え

残りの配列はゼロに初期化されます。

また、配列内の複数の要素を初期化することもできます。次に例を示します。

char arr[10] = {1, 2, 3};

配列arrを作成して初期化します:

index | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
---------------------------------------------
value | 1 | 2 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0
3
追加された
ありがとう、今私は私の方法で安全に行くことができます。 :)
追加された 著者 Matej,

特定の動作が必要な場合は、そのように初期化します。あなたのプログラムの正しい動作がヒンジされているコンパイラのいくつかの奇抜さを仮定すると、単に問題を尋ねるだけです。

1
追加された
イニシャライザで指定されていない要素は、明確に定義された値を持ちます。
追加された 著者 nos,

あなたが明示したいと思っていてgnu cを使用しているのであれば、常に ... があります:

char array[256] = {[0 ... 255] = 0, [7] = 'f',/*and so on...*/};
0
追加された
いいえ、常に ... はありません。これは言語の一部ではなく、gcc固有の拡張です。
追加された 著者 Keith Thompson,
0の範囲を使用するのは冗長ですが、他の値の場合は便利です。
追加された 著者 u0b34a0f6ae,
あなたが正しい;修正するために編集。
追加された 著者 Dave,
私はそれが冗長だと理解しますが、それは意図を明確にします。これは、ゼロで初期化されたデータに依存していることを示しています。同じ理由で calloc ではなく malloc 、次に memset を使用します。
追加された 著者 Dave,