DR *_*R J 2 c arrays row-major-order column-major-order
如果我有一个包含3行和5列的数组,如下所示:
int arr[3][5]={0};
Run Code Online (Sandbox Code Playgroud)
现在我想输入一些数字,所以我喜欢这样:
int arr[3][5] ={10,8,9}
Run Code Online (Sandbox Code Playgroud)
现在数组设置如下:
10 8 9 0 0
0 0 0 0 0
0 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
但我想要的是,实际上数组中的第一个列元素设置如下:
10 0 0 0 0
8 0 0 0 0
9 0 0 0 0
Run Code Online (Sandbox Code Playgroud)
我如何交换或更改数组顺序是这样的?
你要这个:
int arr[3][5] ={{10},{8},{9}};
Run Code Online (Sandbox Code Playgroud)
这会初始化三个第一维数组中的每一个,并且每个数组中的每一个都只显式初始化第一个元素,导致其余数组设置为0.
分解上面的初始化,arr是一个大小为3的数组,其中每个元素是一个int大小为5 的数组.因此{10}初始化这3个数组元素中的第一个,{8}初始化第二个,并{9}初始化第三个.并且因为每个子集仅初始化每个子数组的5个元素中的第一个,所以其余部分初始化为0.
从C标准第6.7.9节开始:
19初始化应在初始化器列表顺序中进行,每个初始化器为特定子对象提供,覆盖同一子对象的任何先前列出的初始化器; 未明确初始化的所有子对象应与具有静态存储持续时间的对象隐式初始化.