2016-12-29 176 views
0

以下是一些示例代码,我知道如何直接将数组传递给function_2。现在我的问题是我应该如何将一个数组传递给function_2中的function_2,以及下面标记的function_1中的参数应该是什么。 我赞赏任何帮助。C++如何通过函数内部函数传递数组

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

你确定你需要一个'int ***'吗?另外,在C++中,通常应该使用'std :: vector'或'std:array'来代替原始数组。简单得多。 – crashmstr

+0

int *作为C++中的数组没有用处。 – SergeyA

+0

int ***与本地数组不相同。 –

回答

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++中原始数组的标准替代品。

下面是如何使用INTS的三维矢量:

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

类型int***需求保持一致,因此对于函数参数之一应该是int ***array,你应该调用函数的两个样所以: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); 
} 
0

你需要小心发送指针在函数的参数。你为什么不用vector来代替?

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