嘿伙计们,我想在 C 中连接多个 2D 数组,当我只做两个时会发生什么,但如果我做更多,它的 sume together.it 似乎每个周期都会灌木丛:
阵列 1
222222222222222222222
000000000001000000000
000000000001000000000
000000000001000000000
000000000001000000000
111111111111111111111
阵列 2
222222222222222222222
000000000001000000000
000000000001000000000
000000000000000000000
000000000001000000000
111111111111111111111
我想要什么
222222222222222222222222222222222222222222
000000000001000000000000000000001000000000
000000000001000000000000000000001000000000
000000000001000000000000000000000000000000
000000000001000000000000000000001000000000
111111111111111111111111111111111111111111
我得到什么
222222222222222222222000000000001000000000
000000000001000000000000000000001000000000
000000000001000000000000000000000000000000
000000000001000000000000000000001000000000
000000000001000000000000111111111111111111
111111111111111111111111111111111111111111
要连接的函数
#define map_height 6
#define map_length 21
#define map_stage_length 5
char ** concatenate(){
char **array=create2DCharArray(map_height,map_length*map_stage_length);
char **mapsarray[5]={create2DCharArray(map_height,map_length),
create2DCharArray(map_height,map_length),
create2DCharArray(map_height,map_length),
create2DCharArray(map_height,map_length),
create2DCharArray(map_height,map_length)};
int i=0,j=0,n=0;
mapsarray[0]=load_map("./resources/maps/map1.map");
mapsarray[1]=load_map("./resources/maps/map2.map");
mapsarray[2]=load_map("./resources/maps/map2.map");
mapsarray[3]=load_map("./resources/maps/map2.map");
mapsarray[4]=load_map("./resources/maps/map2.map");
for (i = 0; i < map_height; i++)
{
for (n = 0; n < map_stage_length; n++)
{
for (j = 0; j < map_length; j++)
{
array[i][(n*map_length)+j]=mapsarray[n][i][j];
}
}
}
return array;
}
杜你有什么想法为什么它推起来吗?
请尝试此循环。
for(i=0; i<map_stage_length; i++){ // for each 2d Array, ith array
for(r=0; r<map_height; r++){ // for each col
for(c=0; c<map_length; c++) // for each row
array[r][ (i*map_length) + c ] = mapsarray[i][r][c] ;
}
}
使用好的变量名称代替 i,j ,k
下面是一个提示,使调试更容易。 使最外层的循环遍历"n"。 每个mapsarray[n]
都是一个输入数组。 将代码的其余部分分解为一个函数,该函数只需将输入数组中的数据写入输出数组中的正确位置。 你最终想要的是这样的东西:
for (i = 0; i < num_maps; ++i)
{
concatenate_array(array, mapsarray[n], n);
}
使用该体系结构,您可以单独对每个输入执行concatenate_array
函数,并观察数据的写入位置。 这应该使数组索引算术或循环边界条件需要调整的位置更加明显。