在C语言中将部分二维数组复制到另一个二维数组中
我想编写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
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
asize\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]));
}