如果我有一个包含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
我如何交换或更改数组顺序是这样的?
答案 0 :(得分:8)
你想要这个:
int arr[3][5] ={{10},{8},{9}};
这会初始化三个第一维数组中的每一个,并且每个数组都只显式初始化第一个元素,导致其余部分设置为0.
分解上面的初始化,arr
是一个大小为3的数组,其中每个元素都是大小为5的int
数组。因此{10}
初始化这3个数组中的第一个元素,{8}
初始化第二个,{9}
初始化第三个。并且因为每个只初始化每个子数组的5个元素中的第一个,所以其余部分初始化为0.
来自C standard的第6.7.9节:
19 初始化应在初始化列表顺序中进行,每个都是 初始化程序为特定的子对象提供覆盖任何子对象 以前列出的同一子对象的初始值设定项; 所有子对象 未明确初始化的应隐式初始化 与具有静态存储持续时间的对象相同。
答案 1 :(得分:2)
为什么不写
int arr[3][5] = { {10, 0, 0, 0, 0},
{8, 0, 0, 0, 0},
{9, 0, 0, 0, 0 }};
即。初始化数组中的每个元素
答案 2 :(得分:2)
使用指定的初始化程序:
int test[3][5] = { [0][0] = 10 , [1][0] = 8 , [2][0] = 9 } ;
答案 3 :(得分:0)
我如何交换或更改数组顺序是这样的?
在C中,完全没有。这不是C的语言特征。
您必须使用for
循环或类似的东西来遍历行而不是列,或者使用单元素数组初始化器的数组。
我怀疑你可能真的想看一些矩阵库,这些矩阵库可以更容易地处理数学结构。