2

如果我有一个 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

我如何交换或更改数组顺序是这样的?

4

4 回答 4

8

你要这个:

int arr[3][5] ={{10},{8},{9}};

这会初始化三个第一维数组中的每一个,并且每个都显式地仅初始化第一个元素,导致其余元素设置为 0。

分解上面的初始化,arr是一个大小为 3 的数组,其中每个元素都是一个int大小为 5 的数组。因此{10}初始化这 3 个数组元素中的第一个,{8}初始化第二个,然后{9}初始化第三个。并且因为它们中的每一个都只初始化每个子数组的 5 个元素中的第一个,所以其余的都初始化为 0。

C 标准的第 6.7.9 节:

19初始化应按初始化程序列表顺序进行,为特定子对象提供的每个初始化程序都将覆盖同一子对象的任何先前列出的初始化程序;所有未显式初始化的子对象都应隐式初始化,与具有静态存储持续时间的对象相同。

于 2016-02-01T18:18:07.813 回答
2

为什么不写

int arr[3][5] = { {10, 0, 0, 0, 0},
                  {8, 0, 0, 0, 0},
                  {9, 0, 0, 0, 0 }};

即初始化数组中的每个元素

于 2016-02-01T18:18:27.577 回答
2

使用指定的初始化器:

int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;
于 2016-02-01T18:42:38.740 回答
0

我如何交换或更改数组顺序为这样?

在 C 中,一点也不。这不是 C 的语言特性。

您必须使用for循环或类似的东西来遍历行而不是列,或者使用单元素数组初始值设定项的数组。

我的怀疑是,您实际上可能想查看一些使数学结构处理更容易的矩阵库。

于 2016-02-01T18:19:33.027 回答