2

次のような 3 行 5 列の配列がある場合:

int arr[3][5]={0};

今、いくつかの数字を入力したいので、次のようにします:

int arr[3][5] ={10,8,9}

そして今、配列は次のように設定されています:

 10  8  9  0  0
  0  0  0  0  0
  0  0  0  0  0

しかし、私が欲しいのは、実際には配列の最初の列要素が次のように設定されていることです:

10  0  0  0  0
8   0  0  0  0
9   0  0  0  0

配列の順序をこのように交換または変更するにはどうすればよいですか?

4

4 に答える 4

8

あなたはこれを求めている:

int arr[3][5] ={{10},{8},{9}};

これにより、3 つの 1 次元配列がそれぞれ初期化され、それぞれが最初の要素のみを明示的に初期化し、残りが 0 に設定されます。

上記の初期化を分解するarrと、サイズ 3 の配列があり、各要素はintサイズ 5 の配列です。したがって{10}、これら 3 つの配列要素の最初の要素を{8}初期化し、2 番目を{9}初期化し、3 番目を初期化します。また、これらはそれぞれ、各サブ配列の 5 つの要素のうち最初の要素のみを初期化するため、残りは 0 に初期化されます。

C標準のセクション6.7.9から:

19初期化は初期化子リストの順序で発生し、特定のサブオブジェクトに提供される各初期化子は、同じサブオブジェクトに対して以前にリストされた初期化子をオーバーライドします。明示的に初期化されていないすべてのサブオブジェクトは、静的ストレージ期間を持つオブジェクトと同じように暗黙的に初期化されます。

于 2016-02-01T18:18:07.813 に答える
2

書かない理由

int arr[3][5] = { {10, 0, 0, 0, 0},
                  {8, 0, 0, 0, 0},
                  {9, 0, 0, 0, 0 }};

つまり、配列内のすべての要素を初期化します

于 2016-02-01T18:18:27.577 に答える