2016-12-29 106 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); 
}