C 列与行的二维数组初始化
如果我有一个3行5列的数组,如下所示: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
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