int eye[3][3] = {
{ 1,0,0 },
{ 0,1,0 },
{ 0,0,1 }
};
是否有更短的初始化方法?它是如此规律,必须有一种更聪明的方式来初始化它,特别是如果它超过3x3,比如10x10或更多。
答案 0 :(得分:9)
在c99中你可以写:
int eye[][3] = { [0][0] = 1, [1][1] = 1, [2][2] = 1 };
所有其他元素都归零,此外编译器会为您计算出数组的大小。只是不要跳过第二个尺寸(3)。
顺便说一下。在您的代码中,您不必使用双括号,这也没关系:
int eye[3][3] = {
1,0,0,
0,1,0,
1,0,1,
};
在c99中你也可以留下尾随逗号,只是为了对称和未来的重构
其他解决方案可能需要您编写一些代码,这可能确实可以节省您在文件中的一些时间/空间。但请注意,这种方式是分裂声明和“初始化”,例如,全局变量可以有所作为。
答案 1 :(得分:6)
您可以使用designated initializers:
int eye[3][3] = { [0][0]=1, [1][1]=1, [2][2]=1};
根据C标准的保证,所有其他元素将被初始化为0.
答案 2 :(得分:4)
您可以尝试以下方法:
#define SIZE 3
int eye[SIZE][SIZE] = {0};
for (int i = 0; i < SIZE ; ++i)
{
eye[i][i] = 1;
}
答案 3 :(得分:1)
如果你想用方形矩阵的方式存储{{ 1,0,0 }, { 0,1,0 }, ...}
这种值,你可以写一个简单的逻辑如下。
#define SIZE 3
int eye[SIZE][SIZE] = {0};
int *p = (int *)eye;
for (i = 0; i < (SIZE * SIZE); i = i + (SIZE + 1))
{
p[i] = 1;
}
或
for (i = 0; i < SIZE; i++)
{
for (j = 0; j < SIZE; j++)
{
if (i == j)
{
eye[i][j] = 1;
}
else
{
eye[i][j] = 0;
}
}
}
注意:以上逻辑仅适用于您给出的样本值。因此,如果您的值具有某种关系,请尝试找到类似的逻辑。如果不是这样,那么即使矩阵的大小为1000x1000,也没有其他方法可以直接初始化它。