我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组int matrix[3][3]
我想在不使用循环的情况下对其进行初始化,如下所示
0 0 0
0 0 0
1 1 1
我也想要 N 维数组的解决方案
我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组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 对这个问题的回答。
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;
在你的情况下,你可以做
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是一个很好的数组初始化资源。
对于常量整数表达式N
(例如宏或enum
常量),您必须“展开”初始化程序。当扩展为十进制常量时,有一些宏技巧可以做到这一点N
,但它们有点复杂。P99提供了这样的宏,你可以用它编写
#define N 23
int matrix[N][N] = {
[N-1] = P99_DUPL(N, 1),
};
这使您可以N
在需要时轻松更改,而无需修改代码中的任何其他内容以进行更新。