如何分配两个2d数组

时间:2013-12-10 19:33:38

标签: c++ multidimensional-array

我编写了一个程序,它创建了一个二维数组,然后设置了它的数字。 我遇到问题的第二步是,当我想要移动行和列时,我遇到了这一行中的问题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];
    }
}
}

有任何帮助吗? 提前谢谢

2 个答案:

答案 0 :(得分:1)

您无法以您的方式动态定义数组。 您需要使用c ++关键字new

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

您无法以您的方式定义数组,使用维度的非常量int值,因为在编译阶段将为内存定义此类静态数组。因此,维度应该是常量表达式。

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

此问题here中有更详细的解答。

答案 1 :(得分:1)

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

首先,您使用的是具有非常量边界的数组,这是一个controversial功能。

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

您可以轻松地将nmatrix(“新矩阵”?)声明为一维数组:

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

或(可能更好)

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

然后,您的代码nmatrix[i*c+j] = 0将有效(但是,只要您使用c),就必须将c+shiftc更改为nmatrix