3

このようにC++で2D配列を宣言することの違いは何ですか?

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

この?

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

上記の配列は、3つの要素すべてが配列そのものであり、下の要素は非配列要素の配列ですか、それとも両方ともコンパイラによって同じものとして読み取られますか?

4

2 に答える 2

6

それらは同等です。最初のものは完全に補強された形です。解釈が明確な場合(2番目の形式など)、標準では中括弧を省略できます。

于 2013-03-03T21:48:25.513 に答える
1

どちらも同じで、次のループを使用してマトリックスの要素にアクセスできます。

for (i=0;i<3;i++)   
     for(j=0;j<3;j++)     
        printf("%d ",mp[i][j] );

最初のケースで中括弧を付ける場合の1つの違いは、次のように最初の引数を省略できます。

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

ただし、C++コンパイラでは警告が表示されます。2番目のタイプの宣言に中括弧がありません。

編集:
あなたがコメントしたように:私のプログラムは私に異なる結果を与えていました

コードを書きました。C ++(gcc-4.7.2)で正常に動作しています。こちらをチェック

于 2013-03-03T21:53:31.780 に答える