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