首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何分配两个2d数组

如何分配两个2d数组
EN

Stack Overflow用户
提问于 2013-12-10 19:33:38
回答 2查看 178关注 0票数 1

我编写了一个程序,它生成一个2d数组,然后设置它的编号。我有问题的第二步是,当我想移动行和列时,我将面临一行nmatrix[i*c+j] = 0;中的一个问题。

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

以下是代码:

代码语言:javascript
复制
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];
    }
}
}

有什么帮助吗??提前感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-10 20:22:32

代码语言:javascript
复制
int nmatrix [r+shiftr][c+shiftc];

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

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

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

代码语言:javascript
复制
int nmatrix[(r+shiftr) * (c+shiftc)];

或者(大概更好)

代码语言:javascript
复制
std::vector<int> nmatrix((r+shiftr) * (c+shiftc));

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

票数 1
EN

Stack Overflow用户

发布于 2013-12-10 19:39:17

不能像处理数组那样动态地定义数组。您需要使用c++关键字new

代码语言:javascript
复制
int nmatrix[][]  = new int [r+shiftr][c+shiftc];

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

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

在这个问题中有更详细的答案,所以问题here

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20503586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档