将动态数组发送到函数C ++

时间:2012-02-28 13:30:11

标签: c memory dynamic

我有一个数组,现在是静态的。这是我用它做的操作。 首先,我创建了一个二维数组。然后我用循环填写它。然后我将它发送到函数,其中还有使用的循环。 在这里,我想发布一些与我类似的示例代码。

bool picture[20][20]; //here's my array right now. Pretty ugly. Just for testing.
for (int y=0;y<Height;y++)
{
    for (int x=0;x<Width;x++)
    {
        if (treshold<middle)
        {
            picture[x][y]=1;
        }
        else
        {
            picture[x][y]=0;
        }
     }
}
//Here's an example of filling an array

leftk = left(picture,widthk, heightk); //That's how I use a function

int left(int picture[200][200],int row,int col)
{
    for (int x = 0;  x <=row-1; x++)
    {
        for (int y = 0; y <=col-1 ;y++)
        {
            if (picture1[x][y]==1)
            {
                return x;
            }
        }
    }
}
//And that's the function itself

所以在这里我需要将我的数组切换为动态数组。这就是我如何声明我的动态数组

bool** picture=new bool*[size];
    for(int i = 0; i < size; ++i)
        picture[i] = new bool[size];

//size is just a variable. 

至于静态声明的周期,一切都很简单。将此数组作为参数发送到函数。

我已经设法创建了一个动态数组,这很简单。然后我用数字填写。这里也没问题。但是我无法理解,如何发送一个数组来运行,以及如何在那里使用它。 你能不能给我一个在函数中修改二维数组的例子。 对不起,这个新手问题。希望有人会帮忙。

顺便说一下,我认为课程包装会有点混乱。

3 个答案:

答案 0 :(得分:4)

如下的功能:

Process2DArray(int **pArray, int rowCount, int colCount)

假设其正在操作的2D阵列,应该满足需要。另外,请考虑使用std::vector<std::vector<int>>而不是手动分配的多维数组。这种方法有助于防止泄漏。第二种方法也让你有锯齿状阵列。

答案 1 :(得分:2)

通常的解决方案是将数组包装在一个类中; C不处理 数组非常好,而且C ++对2D数组没有任何真正的支持 它的库也是。所以你要定义:

class Array2D
{
    std::vector<double> myData;
    int myColumnCount;
    int myRowCound;
    //  ...
};

带有使用i * myColumnCount + j转换两个索引的访问器,或者:

class Array2D
{
    std::vector<std::vector<double> > myData;
    //  ...
};

使用初始化逻辑确保所有行都具有相同的行 长度。第一个通常更简单,更容易理解;如果你 想要增加列数,但第二个是 更容易。

答案 2 :(得分:1)

您有几种选择:

  1. 一个数组数组。例如,对于intint **a应该能够容纳n数组new int *[n],然后使用for通过它们并初始化它们a[i] = new int[elems_per_line] int *a = new int[n * elems_per_line] 1}}
  2. “打包”的1D数组a[i * elems_per_line + j],其中element(i,j) - 0-based实际上是{{1}}。
  3. 你可以改进第1点,让2D矩阵为“卷曲” - 使用不同长度的线条,但你需要一个数组来保持每个长度。
  4. 希望这有帮助。