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