c ++如何将数组传递给函数内部函数

时间:2016-12-29 16:54:05

标签: c++ arrays

以下是一些示例代码,我知道如何直接将数组传递给function_2。现在我的问题是我应该如何将数组传递给function_1内部的function_2,以及我在下面标记的function_1中应该包含哪些参数。 我对任何帮助表示感谢。

void function_2(int ***array)
{
    //do something with array
}

void function_1(/* what should be */)
{
    function_2(/* what should be */);
}

int main()
{
    int ***array;
    function_2(array);

    function_1(array);
}

3 个答案:

答案 0 :(得分:3)

您可以使用相同的多级指针类型直接传递它,其中指针只是按值传递。但是,您还必须传递数组维度的大小,因为基本数组不会在内部存储该信息。否则,在函数内部你无法知道数组有多大。 std::size_t是表示数据结构大小的最佳类型。

void function_2(int ***array, std::size_t pages, std::size_t cols, std::size_t rows)
{
    //do something with array
}

void function_1(int ***array, std::size_t pages, std::size_t cols, std::size_t rows)
{
    function_2(array, pages, cols, rows);
}

但是,你不应该这样做。除非绝对必须使用原始数组,否则则不要。请改用std::vector。它在内部存储大小,因此您不必传递多个参数。 vector还提供各种其他改进和安全检查。它是C ++中原始数组的标准替代。

以下是如何使用int的三维向量:

void function_2
(std::vector< std::vector< std::vector<int> > > &myVector)  // pass by reference
{
    /* do stuff */
}

void function_1
(std::vector< std::vector< std::vector<int> > > &myVector)  // pass by reference
{
    function_2(myVector);
}

int main()
{
    std::size_t pages = /* num */;
    std::size_t cols = /* num */;
    std::size_t rows = /* num */;

    std::vector< std::vector< std::vector<int> > > myVector
            (pages, std::vector< std::vector<int> >(cols, std::vector<int>(rows, 0)));

    function_2(myVector);

    function_1(myVector);
}

答案 1 :(得分:0)

类型int***需要保持一致,因此函数1的参数应为int ***array,您应该像这样调用函数2:function_2(array)

完整代码:

void function_2(int ***array)
{
    //do something with array
}

void function_1(int ***array)
{
    function_2(array);
}

int main()
{
    int ***array;
    function_2(array);

    function_1(array);
}

答案 2 :(得分:0)

您需要小心在函数中发送指针作为参数。为什么不使用矢量?

std::vector<std::vector<std::vector<int>>> function_2(std::vector<std::vector<std::vector<int>>> array)
{
    //do something with array
    return array;
}

std::vector<std::vector<std::vector<int>>>  function_1(std::vector<std::vector<std::vector<int>>> array)
{
    function_2(array);
    return array;
}

int main()
{
    std::vector<std::vector<std::vector<int>>> array;
    function_2(array);
    function_1(array);
}