Błąd podczas kompilacji proszę o wytłumaczenie.

0

Witam czy mogę prosić o wytłumaczenie dlaczego funkcja nie chce przyjąć podanych parametrów a kompilator zwraca następujący komunikat
cannot convert int (*)[4]' to int**' for argument 1' to int czy_liczby_sa_na_swoim_miejscu(int**, int**)'


int czy_liczby_sa_na_swoim_miejscu(int ** tab, int ** cel);
      
main(){
       
       int cel[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};
       int tab[4][4]={1,5,3,7,8,2,0,14,11,13,6,9,12,15,10,4};
       
       czy_liczby_sa_na_swoim_miejscu(tab,cel);
       system("pause");
       
       }
       

0

int cel[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0};

mówisz, że cel[4][4] jest tablicą dwuwymiarową, a podajesz jeden wymiar.
powinno być:
int cel[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};

0

Dzięki za wskazanie błędu jednak po zmianie wciąż jest ten sam błąd.

int czy_liczby_sa_na_swoim_miejscu(int ** tab, int ** cel);
 
main(){
 
       int cel[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
       int tab[4][4] = {{1,5,3,7},{8,2,0,14},{11,13,6,9},{12,15,10,4}};
 
       czy_liczby_sa_na_swoim_miejscu(tab,cel);
       system("pause");
 
       } 
0

Tutaj jest problem wynikający z zaprojektowania języka C. Tablica nie jest wskaźnikiem. Jeżeli deklarujesz np. int tab[5], to masz na stosie zajętych 5 miejsc na inta, bez przydzielania specjalnego wskaźnika na to miejsce. Możesz wywoływać funkcje, które spodziewają się wskażnika, wtedy kompilator pod nazwę tab podstawia adres tablicy. Z tego wynika też, że nie możesz pobrać &tab.

W tablicach dwywymiarowych pojawia się już problem. Zadeklarowana tablica int tab[4][5] jest po prostu 20 intami po kolei w pamięci. Z kolei, jak się deklaruje tablice dynamiczne, to jest to najczęściej tablica wskaźników do wierszy tablicy (będącymi wskaźnikami). W przypadku deklaracji na stosie te wskaźników nie ma, kompilator zna strukturę tablicy w trakcie kompilacji danej funkcji. Żeby funkcja wiedziała, czym jest tablica wielowymiarowa przekazywana do funkcji, to trzeba to wyraźnie zaznaczyć w deklaracji. Wszystkie wymiary poza wymiarem zewnętrznym trzeba wyraźnie zaznaczyć, przez void fun(int par[][5]);

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.