【发布时间】:2012-07-10 21:38:36
【问题描述】:
我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组int matrix[3][3]
我想在不使用循环的情况下初始化它,如下所示
0 0 0
0 0 0
1 1 1
我也想要 N 维数组的解决方案
【问题讨论】:
标签: c arrays matrix initialization
我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组int matrix[3][3]
我想在不使用循环的情况下初始化它,如下所示
0 0 0
0 0 0
1 1 1
我也想要 N 维数组的解决方案
【问题讨论】:
标签: c arrays matrix initialization
对于常量整数表达式N(比如宏或enum 常量),您必须“展开”初始化程序。当N 扩展为十进制常量时,有一些宏技巧可以做到这一点,但它们有点复杂。 P99 提供了这样的宏,你可以写出来
#define N 23
int matrix[N][N] = {
[N-1] = P99_DUPL(N, 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 对this question 的回答。
【讨论】:
在你的情况下,你可以这样做
int a[3][3] = {{}, {}, {1,1,1}};
注意空大括号会自动填充0。
现在,如果你愿意
0 0 0
0 0 0
1 0 0
你可以这样做:
int a[3][3] = {{}, {}, {1,}};
详情请看How to initialize all members of an array to the same value?(这里是一维数组,但会帮助你理解上面写的内容。)
另外,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;
【讨论】: