Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dynamiczne tablice dwuwymiarowe

Ostatnio zmodyfikowano 2013-01-29 22:00
Autor Wiadomość
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.

P-75324
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.

C/C++
char ** tablica;
stworz_tab( tablica, rozmiar );
Jeśli w tym miejscu 'tablica' nie przekażesz przez referencję to funkcja przyjmie jego kopię.

Sam sprawdź
C/C++
#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.
P-75342
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.

C/C++
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
P-75347
1 « 2 »
Poprzednia strona Strona 2 z 2