3

element-by-elementC99 は、次のように&designated メソッドを一緒に使用して配列を初期化する機能を提供します。

int a[] = {2,1,[3] = 5,[5] = 9,6,[8] = 4};

コードの実行時:

#include <stdio.h>

int main()
{
   int a[] = {2,1,[3] = 5,[0] = 9,4,[6] = 25};
   for(int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
          printf("%d    ",a[i]);

   return 0;
 }

(はに初期化され、指定子によって再び初期化されることに注意してください) (これは) が(指定子として )に置き換えられることを期待していたため、o/p は次のようになります。Element 02[0]9element 029[0] = 9

   9    1   0   5   4   0   25

残念ながら、o/p が来たので、私は間違っていました。

   9    4   0   5   0   0   25

予期しない o/p の説明はありますか?

4

2 に答える 2

3

要素初期化子と組み合わせて指定された初期化子を使用すると、指定された初期化子に基づく位置が暗黙的に示されます。

したがって、次のことを行う場合:

int a[] = {2, 1, [3] = 5, 6};

結果は次のようになります。

2 1 0 5 6

いいえ:

2 1 0 6

6 はイニシャライザの位置 3 を占有しますが、その結果の位置は、前に指定されたイニシャライザ (位置 3 を使用) によって暗示されることに注意してください。指定された初期化子によって使用される位置に続く位置は 4 であるため、6 が配置される場所です。

于 2013-06-29T21:02:06.243 に答える
1

初期化子を使用して配列を初期化するプロセスは、基本的に次のとおりです。

  1. インデックス カウンタを 0 に設定し、配列全体を 0 に初期化します
  2. 左から右に初期化要素を通過する
  3. 初期化要素に指定されたインデックスがある場合は、指定されたインデックスにインデックス カウンターを設定します。
  4. インデックス カウンタによって指定されたインデックスに初期化要素の値を格納する
  5. インデックスカウンターをインクリメントする
  6. さらに初期化要素がある場合は、手順 3 に戻ります。
于 2013-06-30T18:12:17.053 に答える