如何在不使用循环的情况下在C中初始化N维数组
我想初始化一个3x3矩阵,前两行为0,最后一行为1。我已经声明了一个2D数组如何在不使用循环的情况下在C中初始化N维数组,c,arrays,matrix,initialization,C,Arrays,Matrix,Initialization,我想初始化一个3x3矩阵,前两行为0,最后一行为1。我已经声明了一个2D数组int矩阵[3][3] 我想在不使用循环的情况下初始化它,如下所示 0 0 11 我还想要一个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很大,
int矩阵[3][3]
我想在不使用循环的情况下初始化它,如下所示
00
11 我还想要一个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的答案来解决
或者,更紧凑:
int matrix[3][3] = {
[2] = { 1, 1, 1 }
};
只要N
是固定的,该解决方案就推广到N
。如果N
很大,您可以使用mouviciel的答案来解决
或
#包括
...
memset(矩阵,0,sizeof(矩阵));
矩阵[2][2]=矩阵[2][1]=矩阵[2][0]=1;
或
#包括
...
memset(矩阵,0,sizeof(矩阵));
矩阵[2][2]=矩阵[2][1]=矩阵[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,}};
有关详细信息,请参阅(这是针对一维数组的,但它将帮助您理解上面写的内容。)
此外,它也是阵列初始化的良好资源 在你的情况下,你可以
int a[3][3] = {{}, {}, {1,1,1}};
请注意,空的大括号将自动用0填充
现在,如果你想
0 0 0
0 0 0
1 0 0
您可以通过以下方式完成:
int a[3][3] = {{}, {}, {1,}};
有关详细信息,请参阅(这是针对一维数组的,但它将帮助您理解上面写的内容。)
此外,它也是阵列初始化的良好资源 对于常量整数表达式
N
(例如宏或enum
常量),必须“展开”初始值设定项。当N
扩展为十进制常量时,有一些宏技巧可以做到这一点,但它们有点复杂。提供这样的宏,您可以使用它来编写
#define N 23
int matrix[N][N] = {
[N-1] = P99_DUPL(N, 1),
};
这使您可以在需要时轻松地更改
N
,而无需在更新时触摸代码中的任何其他内容。对于常量整数表达式N
(例如宏或enum
常量),您必须“展开”初始值设定项。当N
扩展为十进制常量时,有一些宏技巧可以做到这一点,但它们有点复杂。提供这样的宏,您可以使用它来编写
#define N 23
int matrix[N][N] = {
[N-1] = P99_DUPL(N, 1),
};
这使您可以在需要时轻松更改
N
,而无需触摸代码中的任何其他内容即可进行更新。再次感谢您,同时还需要一个N维solution@AndyStowAway此解决方案适用于N维数组,只要N是编译时已知的固定数字。再次感谢,也在寻找一个N维的solution@AndyStowAway此解决方案适用于N维数组,只要N是编译时已知的固定数字。