m7s1994 Temat założony przez niniejszego użytkownika |
Odbieranie wskaźnika tablicy przez funkcje » 2013-10-25 13:02:47 Witam : ) Mam problem z kompilacją załączonego programu. Nie do końca rozumiem przekazywanie wskaźników tablicy do funkcji i nie wiem dlaczego mój program się nie kompiluje. #include<iostream> using namespace std;
void funkcja( int * tablica[] ) { * tablica[ 1 ] = 7; * tablica[ 2 ] = 7; } int main() { int tab[] = { 1, 2, 3, 4, 5 }, a = 5; funkcja( tab ); cout << tab[ 0 ] << " " << tab[ 1 ] << endl; return 0; }
Prosze o pomoc |
|
akwes |
» 2013-10-25 13:10:16 Pewnie kompilator Ci mówi co robisz źle. Wystarczy przeczytać treść błędu kompilacji. |
|
m7s1994 Temat założony przez niniejszego użytkownika |
» 2013-10-25 13:17:02 Tak, mówi, ale nie bardzo to rozumiem dlatego pytam jak należy poprawnie przekazać wskaźnik tablicy do funkcji |
|
akwes |
» 2013-10-25 13:22:39 Jeżeli ktoś Ci powie wprost, to pomoże to tylko raz. Jeżeli sam się nauczysz to będziesz wiedział na przyszłość. Co wypisuje kompilator i jak to rozumiesz? |
|
m7s1994 Temat założony przez niniejszego użytkownika |
» 2013-10-25 13:39:39 Error jest w linijce 12 'cannot convert 'int*' to 'int**' for argument '1' to 'void funkcja(int**)'
Czy to nie jest przypadkiem tak że mój program próbuje przekazać wskaźnik do wskaźnika który nie istnieje?
W funkcja(int *tablica[]) powinienm poprostu zadeklarowac jakiś wskaźnik np *w zamiast *tablica[]? |
|
akwes |
» 2013-10-25 14:35:58 Funkcja chce dostać wskaźnik na wskaźnik int.
'cannot convert 'int*' to 'int**'
|
Kompilator stara się dopasować to co chcesz wysłać (wskaźnik na int) do wskaźnika na wskaźnik do int, czego zrobić nie potrafi. Jeżeli nie widzisz błędu to znaczy, że musisz sobie powtórzyć wskaźniki Wskaźniki a póki co zapoznaj się z Przekazywanie tablic jednowymiarowych do funkcji. |
|
m7s1994 Temat założony przez niniejszego użytkownika |
» 2013-10-26 13:38:31 Dziekuję za wytłumaczenie, juz o wiele jasniej :) Ale mam kolejny problem z tablica dwuwymiarową; #include<iostream> using namespace std;
void funkcja( int * w[ 3 ] ) { }
int main() { int tab[ 2 ][ 3 ] = { { 1, 2, 3 }, { 4, 5, 6 } }; funkcja( tab ); return 0; }
W materiałach z wykładu mam zapisane że void funkcja( int tablica[][ 3 ] ); void funkcja( int * tablica[ 3 ] ); są to równoważne deklaracje funkcji, a wywołać je można poprzez: int t[ 10 ][ 3 ]; funkcja( t ); Podobnie napisałem mój program ale się nie kompiluje (cannot convert 'int (*)[3]' to 'int**' for argument '1' to 'void funkcja(int**)') Myślałem że działa to w taki sposób że przekazuje adres pierwszego elementu(o indeksie 0) w pierwszym wierszy(indeks 0), no ale niestety nie działa w ogóle, a ja kompletnie nie mam pomyslu jak przekazać taka tablice do funkcji z wykorzystaniem wskaznika, a materialu z wykladu w niczym nie pomagaja. Prosiłbym więc o pomoc w zrozumieniu przekazywania w taki sposób tablic wielowymiarowych. |
|
DejaVu |
» 2013-10-26 14:39:28 void funkcja( int w[][ 3 ] ) { }
int main() { int tab[ 2 ][ 3 ]; funkcja( tab ); return 0; }
Jak widać zapisy nie są równoważne, skoro jeden zapis działa, a drugi nie :) |
|
« 1 » 2 |