将2D数组传递给函数C ++

时间:2011-12-15 18:15:01

标签: c++ multidimensional-array

我想将一系列2D数组传递给一个函数,然后将其保存到文件中。我的"保存功能"如下:(问号表示我不知道我到底在做什么。)

void saveArray(double* z(?),double* u1(?),double* u2 (?),double* theta (?), int row, 
int column)
{
ofstream output("data.csv");
for(int j=0;j<row;++j)
for(int i=0;i<column;i++)
{
output<<setprecision(32)<<z[j]<<","<<setprecision(32)<<u1[j][i]<<","
<<setprecision(32)
<<u2[j][i] <<","<<setprecision(32)<<theta[j][i]<<endl;
}

z是:z [30000],u1,u2和θ是[101] [30000] 2D阵列。

如果这令人困惑,请告诉我,我可以发布整个代码。

1 个答案:

答案 0 :(得分:2)

我发现通过将它们视为1d数组来处理2d数组要容易得多,至少在将它们作为参数传递时是这样。

void saveArray(double* z, double* u1, double* u2, double* theta, int row, int column)
{
    ofstream output("data.csv");
    for(int j=0; j<row; ++j)
        for(int i=0; i<column; i++)
        {
            int offset = j * column + i;
            output <<setprecision(32)<<z[j]<<","
                   <<setprecision(32)<<u1[offset]<<","
                   <<setprecision(32)<<u2[offset] <<","
                   <<setprecision(32)<<theta[offset]<<endl;
        }
}

当您调用它时,请务必取消引用您的2D阵列:

saveArray(z, *u1, *u2, *theta, 101, 30000);

您也可以通过引用传递数组的另一种方式,并且您不需要传递大小。只有拥有实际数组,而不只是指向它们的指针时,这才有效:

template<size_t R, size_t C>
void saveArray(double (&z)[C], double (&u1)[R][C], double (&u2)[R][C], double (&theta)[R][C])
{
    ofstream output("data.csv");
    for(int r=0; r<R; ++r)
        for(int c=0; c<C; ++c)
        {
            output <<setprecision(32)<<z[c]<<","
                   <<setprecision(32)<<u1[r][c]<<","
                   <<setprecision(32)<<u2[r][c] <<","
                   <<setprecision(32)<<theta[r][c]<<endl;
        }
}

然后你就这样称呼它:

saveArray(z, u1, u2, theta);