如何分配两个二维数组
how to assign two 2d array
我写了一个程序,它制作了一个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问题的更详细的答案。
相关文章:
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 第二个和第二个最终值在 C++ 中混合在二维数组中
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- C++使用二维数组的程序,该数组要求用户输入两次.它需要将这些输入显示为输出
- 交换二维数组中的两个值
- 在C++中对二维数组进行归零.循环需要2个吗
- 是一个二维数组的名称,它在C++中的第一个元素的地址
- 如果两个维度在编译时都是未知的,如何传递二维数组
- 如何分配两个二维数组
- 如何创建一个一维数组来容纳几个二维数组
- 如何在二维数组中存储数据并使用2个循环显示二维
- 如何从.txt文件中读取两个二维数组
- 二维数组每秒钟两行c++
- 如何在C++中为矢量数据结构中的二维数组获取用户输入,而不使用行和列上的两个for循环
- 如何在二维数组(c++)中找到N个最小值
- 用1个循环解释二维数组迭代
- 在二维数组中查找一个值的多个索引
- 为什么我可以声明一个二维数组与两个维度大小的变量,但不是新的
- 字符指针的二维数组是否需要以两个null结束?
- 二维数组,计算并存储6个随机连接点