1

最初の 2 行を 0、最後の行を 1 として 3 x 3 マトリックスを初期化したいと考えています。2D 配列を宣言しましたint matrix[3][3]

以下のようにループを使わずに初期化したい

0 0 0
0 0 0
1 1 1

N次元配列の解決策もお願いします

4

4 に答える 4

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

または、よりコンパクト:

int matrix[3][3] = {
    [2] = { 1, 1, 1 }
};

解決策は、固定さNれている限り一般化されます。Nが大きい場合は、この質問Nに対する mouviciel の回答を使用できます。

于 2012-07-11T09:41:37.573 に答える
0

あなたの場合、あなたは

int a[3][3] = {{}, {}, {1,1,1}}; 

空の中括弧は自動的に0で埋められることに注意してください。

今、あなたが望むなら

0 0 0
0 0 0
1 0 0

あなたはそれを行うことができます:

int a[3][3] = {{}, {}, {1,}};

詳細については、配列のすべてのメンバーを同じ値に初期化する方法をご覧ください。(これは一次元配列用ですが、上記の内容を理解するのに役立ちます。)

また、http://c-faq.com/~scs/cclass/notes/sx4aa.htmlは、アレイの初期化に適したリソースです。

于 2012-07-11T10:21:14.043 に答える
0
matrix[0][2] = matrix[0][1] = matrix[0][0] =
matrix[1][2] = matrix[1][1] = matrix[1][0] = 0;
matrix[2][2] = matrix[2][1] = matrix[2][0] = 1;

また

#include <string.h>
...
memset(matrix, 0, sizeof(matrix));
matrix[2][2] = matrix[2][1] = matrix[2][0] = 1;
于 2012-07-11T09:47:18.793 に答える
0

定数整数式N(マクロやenum定数など) の場合、イニシャライザを「展開」する必要があります。を 10 進定数に展開するときにこれを行うためのマクロ トリックがありますNが、少し複雑です。P99はそのようなマクロを提供します。

#define N 23

int matrix[N][N] = {
    [N-1] = P99_DUPL(N, 1),
};

これにより、必要に応じて簡単に変更できN、更新のためにコード内の他の部分に手を加える必要はありません。

于 2012-07-11T10:32:09.340 に答える