I apologize(thanks to @JaMiT) because misread your question.
In C++ number of rows and columns in a two dimensional array must be compile time constants. You are not allowed to use variable to set array dimension.
So if second dimension must be variable you could use std::vector
or another mechanism to allocate/deallocate dynamic memory.
Here is my example with std::vector
:
#include <vector>
using resizable_second_dim_array = std::vector<int> (&)[2];
void set_second_dimension(resizable_second_dim_array aArray,
std::size_t aNewDim)
{
for (auto & vec : aArray)
{
vec.resize(aNewDim);
}
}
int main()
{
std::vector<int> my_arr[2]{};
std::size_t secondDim = 10;
set_second_dimension(my_arr, secondDim);
//do something with my_arr
//...
//change second dimension
secondDim = 20;
set_second_dimension(my_arr, secondDim);
//do something with my_arr
//...
return 0;
}
As @Sebastian pointed out another option would be to use std::array
:
#include <array>
#include <vector>
using resizable_second_dim_array = std::array<std::vector<int>, 2>;
void set_second_dimension(resizable_second_dim_array & aArray,
std::size_t aNewDim)
{
for (auto & vec : aArray)
{
vec.resize(aNewDim);
}
}
int main()
{
resizable_second_dim_array my_arr{};
std::size_t secondDim = 10;
set_second_dimension(my_arr, secondDim);
//do something with my_arr
//...
//change second dimension
secondDim = 20;
set_second_dimension(my_arr, secondDim);
//do something with my_arr
//...
return 0;
}