[C++] Dynamiczne tablice dwuwymiarowe
Ostatnio zmodyfikowano 2013-01-29 22:00
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 18:22:08 aa i jescze do ISONA, nie miales racji, jezeli do funkcji przekazujemy tablice poprzez znacznik, to funkcja wtedy nie operuje na kopii, tylko bezposrednio na danych pod wskaznikiem. Tak wiec referencja w tym przypadku nie jest konieczna.
|
|
ison |
» 2013-01-29 20:44:17 to funkcja wtedy nie operuje na kopii, tylko bezposrednio na danych pod wskaznikiem |
Kopiujesz wskaźnik. Wartość nie jest kopiowana. Jeśli w funkcji modyfikujesz wskaźnik to musisz go przekazać przez referencję bo nie operujesz na oryginalnym wskaźniku tylko na jego kopii. Ty w funkcji tworzysz jakąś zmienną i pod wskaźnik przypisujesz jej adres, więc jeśli chcesz z tego adresu korzystać dalej w funkcji main to musisz przekazać wskaźnik przez referencję. Obiekt będzie utworzony, ale Twój wskaźnik będzie zawierał śmieci w mainie. char ** tablica; stworz_tab( tablica, rozmiar );
Jeśli w tym miejscu 'tablica' nie przekażesz przez referencję to funkcja przyjmie jego kopię. Sam sprawdź #include <cstdio>
void f( int * a ) { a = new int; }
int main() { int * a = NULL; f( a ); if( a == NULL ) printf( "NULL\n" ); }
Referencja jest potrzebna tam gdzie modyfikujesz wskaźnik (stworz_tab) a nie wartość spod wskaźnika. |
|
maze Temat założony przez niniejszego użytkownika |
» 2013-01-29 22:00:53 wielkie dzieki za wytlumaczenie tego, teraz wiem o co tu chodzi. glupio bylo myslec, ze mozesz nie byc pewny tego co piszesz ; ). ale wogole to troche przemyslalem, i w zasadzie przekazywanie tego wskaznika na tablice zeby ja dopiero stworzyc nie jest zbyt sprytne, przeciez mozna to zrobic w funkcji i sam adres pozniej zwrocic w returnie. char ** stworz_tab( int n ) { char ** tablica = new char *[ 5 ]; for( int i = 0; i < n; i++ ) { tablica[ i ] = new char[ 30 ]; if( tablica[ i ] == NULL ) cout << "Brak pamieci"; } return tablica; }
dzieki za pomoc |
|
1 « 2 » |