列与行的二维数组初始化
2D Array initialization of columns vs rows
如果我有一个像这样的 3 行 5 列的数组:
int arr[3][5]={0};
现在我想输入一些数字,所以我这样做:
int arr[3][5] ={10,8,9}
现在数组设置如下:
10 8 9 0 0
0 0 0 0 0
0 0 0 0 0
但我想要的是实际上数组中的第一列元素是这样设置的:
10 0 0 0 0
8 0 0 0 0
9 0 0 0 0
如何交换或更改数组顺序成这样?
你想要这个:
int arr[3][5] ={{10},{8},{9}};
这会初始化三个第一维数组中的每一个,并且每个都只显式初始化第一个元素,导致其余元素设置为 0。
分解上面的初始化,arr
是一个大小为3的数组,其中每个元素都是一个大小为5的int
的数组。所以{10}
初始化了其中的第一个3个数组元素,{8}
初始化第二个,{9}
初始化第三个。并且因为这些中的每一个只初始化每个子数组的5个元素中的第一个,所以其余的都初始化为0.
来自 C standard 的第 6.7.9 节:
19 The initialization shall occur in initializer list order, each
initializer provided for a particular subobject overriding any
previously listed initializer for the same subobject; all subobjects
that are not initialized explicitly shall be initialized implicitly
the same as objects that have static storage duration.
为什么不写
int arr[3][5] = { {10, 0, 0, 0, 0},
{8, 0, 0, 0, 0},
{9, 0, 0, 0, 0 }};
即初始化数组中的每个元素
How i can swap or change the array order to be like this?
在 C 中,一点也不。这不是 C 的语言特性。
您必须使用 for
循环或类似的东西来遍历行而不是列,或者使用单元素数组初始值设定项数组。
我怀疑您可能真的想看看一些矩阵库,它们可以更轻松地处理数学结构。
使用指定的初始值设定项:
int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;
如果我有一个像这样的 3 行 5 列的数组:
int arr[3][5]={0};
现在我想输入一些数字,所以我这样做:
int arr[3][5] ={10,8,9}
现在数组设置如下:
10 8 9 0 0
0 0 0 0 0
0 0 0 0 0
但我想要的是实际上数组中的第一列元素是这样设置的:
10 0 0 0 0
8 0 0 0 0
9 0 0 0 0
如何交换或更改数组顺序成这样?
你想要这个:
int arr[3][5] ={{10},{8},{9}};
这会初始化三个第一维数组中的每一个,并且每个都只显式初始化第一个元素,导致其余元素设置为 0。
分解上面的初始化,arr
是一个大小为3的数组,其中每个元素都是一个大小为5的int
的数组。所以{10}
初始化了其中的第一个3个数组元素,{8}
初始化第二个,{9}
初始化第三个。并且因为这些中的每一个只初始化每个子数组的5个元素中的第一个,所以其余的都初始化为0.
来自 C standard 的第 6.7.9 节:
19 The initialization shall occur in initializer list order, each initializer provided for a particular subobject overriding any previously listed initializer for the same subobject; all subobjects that are not initialized explicitly shall be initialized implicitly the same as objects that have static storage duration.
为什么不写
int arr[3][5] = { {10, 0, 0, 0, 0},
{8, 0, 0, 0, 0},
{9, 0, 0, 0, 0 }};
即初始化数组中的每个元素
How i can swap or change the array order to be like this?
在 C 中,一点也不。这不是 C 的语言特性。
您必须使用 for
循环或类似的东西来遍历行而不是列,或者使用单元素数组初始值设定项数组。
我怀疑您可能真的想看看一些矩阵库,它们可以更轻松地处理数学结构。
使用指定的初始值设定项:
int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;