あなたは直接ポインタを単に値によって渡される同じマルチレベルポインタ型を使用してそれを通過することができます。ただし、プリミティブ配列はその情報を内部的に格納しないため、配列のサイズのサイズも渡す必要があります。さもなければ、関数の内部では配列の大きさを知る方法がありません。 std::size_t
は、データ構造のサイズを示すのに最適なタイプです。
ただし、これを行うべきではありません。 プリミティブ配列を使用する必要がある場合を除き、はではありません。代わりにstd::vector
を使用してください。それは内部的にサイズを格納するので、複数のパラメータを渡す必要はありません。 vector
は、他にもさまざまな改良や安全性のチェックを提供しています。これは、C++のプリミティブ配列に対する標準的な代替手段です。ここで
あなたはint型の3次元ベクトルを使用する方法である:
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 ***」が必要ですか?また、C++では、生の配列の代わりに 'std :: vector'や' std:array'を使うべきです。ずっと簡単です。 – crashmstr
C++で配列としてint *を使用することはありません。 – SergeyA
int ***はネイティブ配列と同じではありません。 –