繁体   English   中英

C ++如何在函数内部传递数组

[英]c++ how to pass an array to function inside function

以下是一些示例代码,我知道如何将数组直接传递给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);
}

您可以使用相同的多级指针类型直接传递它,其中指针只是按值传递。 但是,您还必须传递数组尺寸的大小,因为基本数组不会在内部存储该信息。 否则,在函数内部您将无法知道数组的大小。 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);
}

类型int***需要保持一致,因此函数一的参数应为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);
}

您需要注意在函数中将指针作为参数发送。 为什么不使用向量呢?

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM