最初の 2 行を 0、最後の行を 1 として 3 x 3 マトリックスを初期化したいと考えています。2D 配列を宣言しましたint matrix[3][3]
以下のようにループを使わずに初期化したい
0 0 0
0 0 0
1 1 1
N次元配列の解決策もお願いします
最初の 2 行を 0、最後の行を 1 として 3 x 3 マトリックスを初期化したいと考えています。2D 配列を宣言しましたint matrix[3][3]
以下のようにループを使わずに初期化したい
0 0 0
0 0 0
1 1 1
N次元配列の解決策もお願いします
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 の回答を使用できます。
あなたの場合、あなたは
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は、アレイの初期化に適したリソースです。
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;
定数整数式N
(マクロやenum
定数など) の場合、イニシャライザを「展開」する必要があります。を 10 進定数に展開するときにこれを行うためのマクロ トリックがありますN
が、少し複雑です。P99はそのようなマクロを提供します。
#define N 23
int matrix[N][N] = {
[N-1] = P99_DUPL(N, 1),
};
これにより、必要に応じて簡単に変更できN
、更新のためにコード内の他の部分に手を加える必要はありません。