如何分配两个二维数组

how to assign two 2d array

本文关键字:二维数组 两个 分配 何分配      更新时间:2023-10-16

我写了一个程序,它制作了一个2d数组,然后设置其编号。我遇到问题的第二步是,当我想移动行和列时,我在这行nmatrix[i*c+j] = 0; 中遇到了问题

错误是:error: incompatible types in assignment of 'int' to 'int [(((sizetype)(((ssizetype)(c + shiftc)) + -1)) + 1)]'

这是代码:

void shiftMatrix(int *matrix, int r,int c ,int shiftr,int shiftc){
int nmatrix [r+shiftr][c+shiftc];
for(int i = 0; i< shiftr; i++)
{
    for(int j = 0; j<shiftc;j++)
    {
        nmatrix[i*c+j] = 0;
    }
}
for(int i = shiftr; i< r; i++)
{
    for(int j = shiftc; j<c;j++)
    {
        nmatrix[i*c+j] = matrix[i*c+j];
    }
}
}

有什么需要帮忙的吗??提前感谢

int nmatrix [r+shiftr][c+shiftc];

首先,您使用的是一个具有非恒定边界的数组,这是一个有争议的特性。

此外,这里您声明的是一个二维数组nmatrix,但您的另一个矩阵(matrix)是指向int(或者一维数组,如果您喜欢这样看的话)的指针。这会造成混乱。

您可以很容易地将nmatrix("新矩阵"?)声明为一维数组:

int nmatrix[(r+shiftr) * (c+shiftc)];

或者(可能更好)

std::vector<int> nmatrix((r+shiftr) * (c+shiftc));

然后,您的代码nmatrix[i*c+j] = 0将工作(但是,无论何时使用nmatrix,都必须将c更改为c+shiftc)。

您不能以这种方式动态定义数组。您需要使用c++关键字new:

int nmatrix[][]  = new int [r+shiftr][c+shiftc];

您不能像定义数组那样使用维度的非常量int值来定义数组,因为这样的静态数组是在编译阶段为内存定义的。因此,维度应该是常量表达式。

相反,使用关键字new,您可以在运行时阶段为数组定义维度,因为这是动态分配。

这里有这个SO问题的更详细的答案。