Zwrot tablicy dwuwymiarowej

0

Witam.
Chciałbym zwrócić w funkcji tablicę dwuwymiarową.

class Klasa
{
int tab[20][50];
int ** getTab();
}

int ** Klasa::getTab()
{
return ??
}

Próbowałem różnych kombinacji i żadna nie działała. Mógłby ktoś pomóc rozwiązać problem ?

0

Trafiłeś na jedną z rzeczy, którą każda osoba pisząca w C musiała popełnić i w końcu zrozumieć. Tablica nie jest wskaźnikiem! Przy operowaniu nazwą tablicy zachodzi automatyczna konwersja do wskaźnika np. przy wywołaniu funkcji itp. Jednak taka konwersja zachodzi tylko dla jednego wymiaru tablicy wielowymiarowej, więc nie można zwrócić tablicy dwuwymiarowej przez wskaźnik do wskaźnika (pomijając brak tej tablicy wskaźników). Jeżeli piszesz w C++ to powinieneś użyć np. vectora vectorów (lepsza abstrakcja tablicy, szczególnie przy wywoływaniu funkcji), z kolei jak piszesz w "C z klasami" (bardzo popularna odmiana C++ wśród osób uczących się, ale niekoniecznie dobra) to zwróć tablicę dynamiczną.

0

Skorzystałem z tablicy dynamicznej.

Dziękuję bardzo.

0

na siłę można tak, ale vector< vector<int> > byłby lepszy:

#include <cstdio>

class Klasa
{
public:
   int tab[20][50];
   int* getTab()
     {
      return (int*)tab;
     }
};

int main()
{
  Klasa a;
  a.tab[3][7] = 6;
  printf("%d\n",a.tab[3][7]);
  
  int* tab = a.getTab();
  tab[3*50+7] = 4;
  printf("%d\n",a.tab[3][7]);

  return 0;
}
0

Dobre rozwiązanie to boost::multi_array, niestety Boost to zewnętrzna biblioteka.

1 użytkowników online, w tym zalogowanych: 0, gości: 1