C++ 如何分配两个二维数组

C++ 如何分配两个二维数组,c++,multidimensional-array,C++,Multidimensional Array,我已经写了一个程序,可以制作一个二维数组,然后设置它的数字。 我遇到问题的第二步是,当我想移动行和列时,我会遇到这一行的问题nmatrix[I*c+j]=0 错误是这样的:错误:将“int”赋值给“int[((sizetype)((ssizetype)(c+shiftc))+-1))+1)]”时的类型不兼容。 代码如下: void shiftMatrix(int *matrix, int r,int c ,int shiftr,int shiftc){ int nmatrix [r+shiftr

我已经写了一个程序,可以制作一个二维数组,然后设置它的数字。 我遇到问题的第二步是,当我想移动行和列时,我会遇到这一行的问题
nmatrix[I*c+j]=0

错误是这样的:
错误:将“int”赋值给“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*矩阵,int r,int c,int shiftr,int shiftc){ int n矩阵[r+shiftr][c+shiftc]; 对于(int i=0;i对于(int j=0;j,您不能以动态方式定义数组。 你需要使用C++关键字<代码>新< /C> >:

int nmatrix[][]  = new int [r+shiftr][c+shiftc];
您不能像以前那样定义数组,使用非常量int值作为维度,因为这样的静态数组是在编译阶段为内存定义的。因此维度应该是常量表达式

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

这个问题有更详细的答案

首先,您使用的是具有非常量边界的数组,这是一个特性

此外,这里您声明的是一个二维数组
nmatrix
,但您的另一个矩阵(
matrix
)是指向
int
(或者一维数组,如果您愿意这样看的话)。这会导致混淆

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

int nmatrix[(r+shiftr) * (c+shiftc)];
或者(可能更好)

std::向量n矩阵((r+shiftr)*(c+shiftc));

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

不幸的是,它不起作用。我用这种方法创建了二维数组。第一个错误:错误:将“nmatrix”声明为多维数组必须对除第一个之外的所有维度都有边界;第二个错误:错误:“c”不能出现在常量表达式中|第一步,学习如何创建简单的一维动态数组。cf我犯了一个打字错误在我的回答中,它是
int-nmatrix[]][]
而不是
int[]]nmatrix
。对不起,可能重复的是您希望移动行和列,还是只移动行就足够了?(这对于选择解决方案非常重要)我希望能够同时移动这两个行和列
int nmatrix[(r+shiftr) * (c+shiftc)];
std::vector<int> nmatrix((r+shiftr) * (c+shiftc));