我试图弄清楚如何将2D数组合并为一个。
我有一个二维数组,如下所示:
#include <stdio.h>
#define ROW 2
#define COL 10
int
main(void)
{
int array[ROW][COL] = {2,6,12,18,23,55,57,58,59,60} , {1,3,5,9,11,19,27,28,31,56};
}
我试图使用嵌套的for循环,但没有任何运气。
答案 0 :(得分:1)
执行以下操作:
#include <string.h> /* for memcpy() */
#define ROW (2)
#define COL (10)
int main(void)
{
int array[ROW][COL] = {
{ 2, 6, 12, 18, 23, 55, 57, 58, 59, 60},
{ 1, 3, 5, 9, 11, 19, 27, 28, 31, 56}
};
int array1D[ROW*COL];
memcpy(array1D, array, ROW*COL * sizeof(int));
}
在C数组中,确保将元素以连续的方式放置在内存中(无填充!)。因此,只需复制内存即可。
答案 1 :(得分:0)
memcpy
不能保证正常工作。从技术上讲,您正在制作一个数组数组,并且取决于每个单独的“线性”数组的内存分配方式,memcpy
可能会或可能不会工作。 会与您分配的方式相同,但不能保证。
这就是您想要做的。
#include <stdio.h>
#define ROW 2
#define COL 10
int
main(void)
{
int array[ROW][COL] ={ {2,6,12,18,23,55,57,58,59,60} , {1,3,5,9,11,19,27,28,31,56}};
int i,j;
int array1D[ROW*COL];
for (i=0; i<ROW; i++){
for (j=0; j<COL; j++){
array1D[i*COL+j]=array[i][j];
}
}
for (i=0; i<ROW*COL; i++){
printf("%d ",array1D[i]);
}
}
请注意,这里i
代表行,j
列。要访问单个int
并保持“ 2d”性质,索引将为row #*column length+column #
。或i*COL+j
答案 2 :(得分:0)
/* merge nbyA bytes of data in a with nbyB bytes of data in b. Return result. */
void *merge(const void *a, size_t nbyA, const void *b, size_t nbyB)
{
void *buf = malloc(nbyA + nbyB);
if (buf) {
memcpy(buf, a, nbyA);
memmove(buf + nbyA, b, nbyB);
}
return buf; /* caller must free */
}
要a
通过array[0]
;到b
通过array[1]
。
此解决方案的优点是您具有通用的merge
函数,该函数不仅可以用于合并2D数组的两个子数组,而且可以用于合并任意两个数据块。