在c++中复制一个矩阵/2d数组到另一个

Copy a matrix/2d array to another in c++

本文关键字:2d 数组 另一个 一个 c++ 复制      更新时间:2023-10-16

我试图复制一个2d数组到另一个2d数组,我有这两个数组创建:

#define mapXcor 50
#define mapYcor 50
char secondStage    [mapXcor][mapYcor];
char currentStage   [mapXcor][mapYcor];
//mapXcor and mapYcor are constant integers

现在我的secondStage[][]数组上填充了值,但currentStage[][]不是,我想将secondStage的值分配给currentStage。所以我创建了下面的函数:

void populateArray(char (&arrayA)[mapXcor][mapYcor], char arrayB[mapXcor][mapYcor]) {
    for(int a = 0; a < mapXcor + 1; ++a) {
        for(int b = 0; b < mapYcor + 1; ++b) {
            arrayA[mapXcor][mapYcor] = arrayB[mapXcor][mapYcor];
        }
    }
}
populateArray(currentStage[mapXcor][mapYcor],secondStage[mapXcor][mapYcor]);

但是当我使用这个函数时,它给了我一个错误:

1智能感知:类型为"char (&)[20][50]"(非const限定的)不能用"char"

类型的值初始化

2智能感知:参数类型为"char"与&;char (*)[50]&;

类型的参数不兼容

我该如何解决这个问题?

改变for循环中的赋值语句:

arrayA[mapXcor][mapYcor] = arrayB[mapXcor][mapYcor];

arrayA[a][b] = arrayB[a][b];

您可能正在访问的代码。不要给老师看:-)-有太多来自实际编程的内容。只要看看,然后写下你自己的解决方案:

#include <string.h>
#include <stdio.h>
#define mapXcor 5
#define mapYcor 5
static char secondStage    [mapXcor][mapYcor];
static char currentStage   [mapXcor][mapYcor];
void populateArray(char (&arrayA)[mapXcor][mapYcor], const char (&arrayB)[mapXcor][mapYcor]) {
/*
    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b) {
            arrayA[a][b] = arrayB[a][b];
        }
    }
*/
    memcpy(arrayA, arrayB, sizeof(arrayB));
}
int main()
{
    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b){
            currentStage[a][b] = a*b + 10*a;
        }
    }
    populateArray(secondStage, currentStage);
    for(int a = 0; a < mapXcor; ++a) {
        for(int b = 0; b < mapYcor; ++b){
            printf("%2i ", secondStage[a][b]);
        }
        printf("n");
    }
    return 0;
}

的评论:

  • 在循环中有不良的数组索引限制。寻找正确的函数下评论。
  • 你在循环分配中有错误的索引。同样,注释掉代码。
  • 如果你通过引用(目的地)传递一个数组,为什么不为源使用常量引用?
  • 在实践中,你的区域有相同的类型(你甚至可以定义它们具有相同的类型)没有人按元素复制它们。我已经使用了memcpy(),但这只有在内存区域没有的情况下才有用重叠(在这种情况下-是的)。检查man 3 memcpy .
  • 努力学习:-)
#define ROWS 2
#define COLS 2
void copyArray(char (&arrayA)[ROWS][COLS], const char (&arrayB)[ROWS][COLS] ) {
    memcpy(arrayA, arrayB, sizeof(arrayB));
}
int main(void){
    char arr1  [ROWS][COLS];
    char arr2  [ROWS][COLS];
    // init arr1
    copyArray(arr2, arr1);
    return 0;
}