int eye[3][3] = {
{ 1,0,0 },
{ 0,1,0 },
{ 0,0,1 }
};
有没有更短的方法来初始化它?它是如此有规律,以至于必须有一种更智能的方法来初始化它,尤其是如果它超过 3x3,比如 10x10 或更大。
int eye[3][3] = {
{ 1,0,0 },
{ 0,1,0 },
{ 0,0,1 }
};
有没有更短的方法来初始化它?它是如此有规律,以至于必须有一种更智能的方法来初始化它,尤其是如果它超过 3x3,比如 10x10 或更大。
在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中,您还可以保留尾随逗号,只是为了对称和未来的重构
其他解决方案可能需要您编写一些代码,这确实可以为您节省一些时间/空间。但请注意,这种方式您将声明和“初始化”分开,例如在全局变量的情况下会有所作为。
您可以尝试以下方法:
#define SIZE 3
int eye[SIZE][SIZE] = {0};
for (int i = 0; i < SIZE ; ++i)
{
eye[i][i] = 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,也没有其他方法可以直接初始化它。