将3D动态分配的数组传递给函数(C ++)

时间:2014-01-29 03:34:00

标签: c++ arrays function dynamic-memory-allocation

我动态分配了一个3D数组。然后我将字符串分配给数组。 3D阵列打印出来很好。但我似乎无法找到将其传递给函数的方法。我尝试过将数组传递给函数的许多变体。以下是我的代码,非常感谢任何帮助。

//dynamically allocate 3d array
string *** array3D;
array3D = new string**[rows];
for(int i = 0; i < rows; i++)
{
    array3D[i] = new string*[columns];
    for(int j=0; j < columns;j++)
    {
        array3D[i][j] = new string[pages];
    }
}

//put strings from file into array
for(int k = 0; k < pages; k++)
{
    for(int i = 0; i < rows; i++)
    {
        for(int j=0; j < columns;j++)
        {
            puzzleFile >> array3D[i][j][k];
        }
    }
}

// Call function
find(array3D);

// The couts are simply to verify the array passed in successfully
void find(string ***&array)
{
    cout << "in function array[0][0][0]" << array[0][0][0] << endl;
    cout << "array[1][0][2]" << array[1][0][2] << endl;
    cout << "array[1][0][2]" << array[0][2][1] << endl;
    return;
}

2 个答案:

答案 0 :(得分:1)

我不知道问题的具体细节,但是,您是否考虑过将这样的东西用于3D阵列:

#include <vector>
#include <string>
....
typedef std::vector<std::string>> V1d;  // define a vector of strings: 'pages'
typedef std::vector<V1d> V2d;  // define a vector of V1d: 'columns' of 'pages'
typedef std::vector<V2d> V3dS; // define a vector of V2d: 'rows' of 'columns' of 'pages'
...
void find(V3dS &a3d) {
    // access the data here as a3d[i][j][k] per page
}
...
V3dS array3D(rows, V2d(columns, V1d(pages)));  // declare your array with wanted sizes
...
puzzlefile >> array3D[i][j][k]; // Page data
...
find(array3D);  // call your function

这也有一点好处:无需担心解除分配任何东西。当array3D变量超出范围时,向量将释放所有内容。 您可能会发现另一个有用的想法:)

答案 1 :(得分:-1)

尝试将重命名函数findmyfind

等其他内容一起使用

与OP讨论后,才知道他错过了宣布功能原型。因此更新答案。

编辑:删除了string.h包含建议。