1

我想初始化一个 3 x 3 矩阵,前两行为 0,最后一行为 1。我已经声明了一个二维数组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
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

在你的情况下,你可以做

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

对于常量整数表达式N(例如宏或enum常量),您必须“展开”初始化程序。当扩展为十进制常量时,有一些宏技巧可以做到这一点N,但它们有点复杂。P99提供了这样的宏,你可以用它编写

#define N 23

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

这使您可以N在需要时轻松更改,而无需修改代码中的任何其他内容以进行更新。

于 2012-07-11T10:32:09.340 回答