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

2011-10-17 13:28
Błaszej
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]' toint' for argument 1' toint 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");

       }

Pozostało 580 znaków

2011-10-17 13:31
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}};


░█░█░█░█░█░█░█░█░█░█░█░
nawiasy wewnętrzne są ignorowane przez kompilator wiec int cel[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; niczym się nie różnie od int cel[4][4] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; - mto9 2011-10-18 13:56

Pozostało 580 znaków

2011-10-17 14:15
Błaszej
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");

       } 

Pozostało 580 znaków

2011-10-17 18:01
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]);

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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