列与行的二维数组初始化

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 } ;