Użyj std::vector.
Jeśli na prawdę nie możesz i zgodnie z tym co piszesz - wielkosc podaje użytkownik - musisz zaalokować tablice dynamicznie, bo wielkość tablic alokowanych na stosie musi być znana w czasie kompilacji. Tak nie mozna:
int n;
cin >> n;
int tab[n];
Jeśli nie wiesz czemu to odsyłam do wątku, który przewijał się przez to forum już setki razy: https://forum.pasja-informatyki.pl/360512/wskazniki-dynamiczne-alokowanie-pamieci
I jeśli zaalokujesz tablice 2d dynamicznie w ten sposób;
double **tab = new double*[n];
for (size_t i = 0; i < n; i++)
{
tab[i] = new double[m];
}
To nie ma żadnego problemu z przesłaniem tablicy jako double**, bo tym właśnie jest tab.
Aczkolwiek gorąco zachęcam do użycia vectora.