在C语言中将部分二维数组复制到另一个二维数组中

在C语言中将部分二维数组复制到另一个二维数组中,c,arrays,C,Arrays,我想编写C代码,使用memcpy函数将一个2D数组块复制到另一个2D数组中。在我包含的特定代码中,我尝试将2x4数组矩阵的最后3列复制到2x3数组mat_copy中 double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}}; double mat_copy[2][3]; double sz = sizeof(mat_copy)/2; for (int i = 0; i < 2; i++) { memcpy(&mat_copy[i

我想编写C代码,使用
memcpy
函数将一个2D数组块复制到另一个2D数组中。在我包含的特定代码中,我尝试将2x4数组
矩阵的最后3列复制到2x3数组
mat_copy

double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};
double mat_copy[2][3];
double sz = sizeof(mat_copy)/2;

for (int i = 0; i < 2; i++) {
    memcpy(&mat_copy[i][1], &matrix[i][1], sz);
}
双矩阵[2][4]={{0,1,2,3},{4,5,6,7}; 双联复印件[2][3]; 双sz=尺寸(材料副本)/2; 对于(int i=0;i<2;i++){ memcpy(材料副本[i][1],&matrix[i][1],深圳); }

我得到的是输出:
[0,1,2;3,5,6]
而不是
[1,2,3;5,6,7]
。一旦在内存中给出初始指针,
memcpy
函数如何选择要复制的地址?我知道我的错误与寻址2D数组有关,但我不知道如何更改它

您从目的地的
1
开始,而不是从
0
开始,因此您要复制到行尾

改变

memcpy(&mat_copy[i][1], &matrix[i][1], sz);


要复制最后3列,必须将列0的偏移量作为目标传递。您可以通过以下方式进一步简化代码:

double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};
double mat_copy[2][3];

for (int i = 0; i < 2; i++) {
    memcpy(mat_copy[i], &matrix[i][1], sizeof(mat_copy[i]));
}
双矩阵[2][4]={{0,1,2,3},{4,5,6,7}; 双联复印件[2][3]; 对于(int i=0;i<2;i++){ memcpy(mat_copy[i]、&matrix[i][1]、sizeof(mat_copy[i]); }
您知道多维数组在内存中的布局吗?您不会复制列。您要复制行。将
sz
a
size\u t
改为
double
。最后3列的大小与
mat\u copy
中任意一个元素的3倍大小相同<代码>大小_t sz=3*mat_copy的大小[0][0]或在这种情况下,1行
size_t sz=sizeof mat_copy[0]的大小
double matrix[2][4] = {{0, 1, 2, 3}, {4, 5, 6, 7}};
double mat_copy[2][3];

for (int i = 0; i < 2; i++) {
    memcpy(mat_copy[i], &matrix[i][1], sizeof(mat_copy[i]));
}