2

配列を初期化するときa[][]

int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

次に、配列要素を表示します。

なぜ私は得るのですか:

11 89 0 0 0 
0 0 0 0 0

ここで最初の角かっこの代わりに中かっこを使用するとどうなりますか?

4

4 に答える 4

8
(8,9,7,67,11)

は、11と評価されるコンマ演算子を使用した式です。他のイニシャライザーについても同じことが言えます。したがって、最初の2つの要素のみを明示的に初期化し、他のすべての要素は0に初期化されます。コンパイラーは、初期化子に中括弧のレベルがないことを警告する必要があります。

中括弧を使用する場合はa、おそらく意図されているように、の2つのコンポーネント配列を初期化します。

于 2012-11-03T17:19:41.203 に答える
3
 int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

(ブロックスコープで)と同等です:

 int a[2][5]={11, 89};

,Cコンマ演算子です。オペランドを左から右に評価し、右のオペランドの値を生成します。

ファイルスコープでは、配列初期化子は定数である必要があり、,式は定数式ではないため、配列宣言は無効です。

于 2012-11-03T17:19:14.403 に答える
3

中かっこではなく括弧を使用しているためです。あなたが欲しい:

int a[2][5] = { { 8,9,7,67,11 }, { 7,8,9,199,89 } };
//              ^^^          ^^^^^^            ^^^

元のコードでは、コンマ演算子を知ったばかりで、実際にを記述していint a[2][5] = { 11, 89 };ます。これは合法ですが、欠落しているすべての要素をゼロに初期化します。

于 2012-11-03T17:19:50.507 に答える
1

これはの概念であり、配列を初期化 するために使用する必要がありcomma operatorますcomma separator{}

int a[2][5]={(8,9,7,67,11),(7,8,9,199,89)};

ここで(8,9,7,67,11)は、コンマ演算子が評価され、右端の値が返される値である11ため、forcomma operator(7,8,9,199,89)同等です。89left to right

したがって、それはと同等ですa[2][5]={11,89}

しかし(8,9,7,67,11),(7,8,9,199,89)、で使用されるコンマ() , ()comma separator

于 2012-11-03T17:20:19.677 に答える