【问题标题】:how to assign two 2d array如何分配两个二维数组
【发布时间】:2013-12-11 04:22:32
【问题描述】:

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

请帮忙?? 提前致谢

【问题讨论】:

  • 您想移动行和列,还是只移动行就足够了? (这对于选择解决方案非常重要)
  • 我希望他们两个都可以移动

标签: c++ multidimensional-array


【解决方案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 将起作用(但是,无论何时使用 nmatrix,您都必须将 c 更改为 c+shiftc)。

【讨论】:

    【解决方案2】:

    您不能按照自己的方式动态定义数组。 你需要使用c++关键字new:

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

    你不能像以前那样定义数组,维度是非恒定的 int 值,因为这样的静态数组要在编译阶段为 memory 定义。因此维度应该是 const 表达式。

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

    这个SO问题here有更详细的答案。

    【讨论】:

    • 不幸的是它不起作用。我以这种方式创建了二维数组。
    • 第一个错误:错误:将“nmatrix”声明为多维数组必须对除第一个以外的所有维度都有边界|
    • 第二个错误:错误:'c'不能出现在常量表达式中|
    • 第一步,学习如何制作简单的一维动态数组。 cfstackoverflow.com/questions/4029870/…
    • 我的回答有误;它是 int nmatrix[][] 而不是 int [][]nmatrix。对不起
    猜你喜欢
    • 2011-07-24
    • 2020-09-05
    • 1970-01-01
    • 2017-09-28
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多