将标准和动态数组传递给c ++中的函数

时间:2014-08-08 18:05:24

标签: c++ arrays dynamic

我正在学习cpp,这与我正在进行的作业相关。我对编写接受动态多维数组的函数感到困惑。例如,如果我有两个1D数组,一个是动态的而另一个不是,我可以将它们中的任何一个传递给下面的函数并让它们都工作:

// Regular 1D array
int b[] = {1,2,3};

// Dynamic 1D array
int *p_b;
p_b = new int[3];
for(int i=0;i<3;i++)
{
    p_b[i] = i;
}

//Function prototype. Works when I use printGrid(b) and printGrid(p_b)
void printGrid(int *a);

但是,如果我对2D数组有以下情况,那么它只会在我传入动态数组时编译:

// Regular 2D array
int c[3][3] ={{1,2,3},{4,5,6,},{7,8,9}};

// Dynaimc 2D array
int **p_c;
p_c = new int*[3];
for(int i=0; i<3;i++)
{
    p_c[i] = new int[3];
}
for(int i=0; i<3; i++)
{
    for(int j=0;j<3;j++)
    {
        p_c[i][j] = i+j;
    }
}

// Function prototype - Compiles and works using printGrid2(p_c) but fails to compile     using printGrid2(c)
void printGrid2(int **a);

printGrid函数下面的代码完全相同,所以有两个函数似乎很浪费,一个使用[] []作为参数,另一个使用int ** a。我不是不安全或遗失的东西吗?提前谢谢!

1 个答案:

答案 0 :(得分:0)

这种情况并不少见,您可以做的是将printGrid2转发到printGrid以利用该功能(避免重复代码和维护开销)。

printGrid2遍历第一个维度并使用类似[0]的方式调用printGrid .. [n]