2016-08-09 5 views
37

これは愚かな質問かもしれませんが、の一部をの値ではなく配列に割り当てることは可能ですか?私が欲しいものを明確にする:私は{1,0,0,0,2,0,0,0,3,0,0,0}のような配列が必要な場合はいくつかの値を持つ配列の要素をほんの少ししか初期化する方法はありますか?

私はそれが好きで作成することができます。この配列の

int array[] = {1,0,0,0,2,0,0,0,3,0,0,0}; 

ほとんどの値は「0」です。この値をスキップして値1、2、3のみを割り当てることは可能ですか?それは、この値をスキップして値のみ1、2と3を割り当てることができ

int array[12] = {0: 1, 4: 2, 8: 3}; 
+0

これは、配列をどのように配置するかによって異なります。有効なインデックスがどこにあるか知っていますか? –

+8

ところで、これは初期化であり、割り当てではありません。 CおよびC++では配列への代入はできません。 –

答えて

66

:私は何かを考えますか?

Cでは、はい。指定された初期化子を使用します(C99では追加され、C++ではサポートされません)。イニシャライザ上記

int array[12] = {[0] = 1, [4] = 2, [8] = 3}; 

それぞれ値123と素子04アレイarray8を初期化します。残りの要素は0で初期化されます。これは、

int array[12] = {1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0}; 

と同等です。要素の並び順は重要ではありません。一つは、また

int array[12] = {[8] = 3, [0] = 1, [4] = 2}; 

のように書く。しかし[ ]内部表現が整数定数式ものでなければならないことに注意してくださいすることができます。

+0

これはまさに私が検索したものです。どうもありがとう! – kaetzacoatl

+2

@WhiZTiM指定された初期化子はCではありません。C++ – 101010

+0

配列のすべての値を単一の値に初期化できるようにする方法を教えてください。 –

5

それは、アレイ内のすべての要素のmemsetすることにより、デフォルト値を与え、その後、特定の要素に割り当てることであろう行うための別の方法:ここで

int array[12]; 
memset(array, 0, sizeof(int) * 12); //if the default value is 0, this may not be needed 
array[0] = 1; array[4] = 2; array[8] = 3; 
+3

'memset(array、0、sizeof array);の何が問題なのですか? – wildplasser

+2

これは実際にはOKです。 'sizeof(data_type)* data_type_size'を使用して - ちょうど私の習慣... :) – Ian

12

は私の些細なアプローチです:

int array[12] = {0}; 
array[0] = 1; array[4] = 2; array[8] = 3; 

しかし、技術的に言えば、これは配列を「初期化していません」。

関連する問題