C 列与行的二维数组初始化

C 列与行的二维数组初始化,c,arrays,column-major-order,row-major-order,C,Arrays,Column Major Order,Row Major Order,如果我有一个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]={0}; int arr[3][5] ={10,8,9} 10 8 9 0 0 0 0 0

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

根据本手册第6.7.9节:

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

为什么不写呢

int arr[3][5] = { {10, 0, 0, 0, 0},
                  {8, 0, 0, 0, 0},
                  {9, 0, 0, 0, 0 }};
i、 e.初始化数组中的每个元素

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

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

您必须使用
for
循环或类似的方法来迭代行而不是列,或者使用一个由一个元素数组初始值设定项组成的数组


我的怀疑是,您可能真的想看看一些矩阵库,它们使数学结构的处理更容易。

使用指定的初始值设定项:

int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;

有趣的通用方法:LSNED