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

[C++] Zwracanie przez funkcję tablicy dwuwymiarowej

Ostatnio zmodyfikowano 2014-12-06 15:19
Autor Wiadomość
fisherek
Temat założony przez niniejszego użytkownika
[C++] Zwracanie przez funkcję tablicy dwuwymiarowej
» 2014-12-06 13:52:17
Jako, że jestem tutaj nowy witam wszystkich! ;)

Mam problem, a mianowicie: mam funkcję która generuje znaki do tablicy typu char i chciałbym przekazać zawartość tej tablicy do innej tablicy w main.
Od razu mówię, że googlałem ale albo przykład nie pasował do mojego, albo nie działało, albo nie rozumiałem zbytnio o co chodzi.

Chciałbym uzyskać coś takiego jak niżej. Tylko jak to poprawnie napisać?

C/C++
char generow_planszy()
{
    char tabAut[ 7 ][ 7 ];
   
    for( int i = 0; i < 7; i++ )
    {
        for( int j = 0; j < 7; j++ )
        {
            tabAut[ i ][ j ] = '-';
        }
    }
}

int main()
{
    char tabGr1[ 7 ][ 7 ];
    tabGr1 = generow_planszy();
    //operacje na tablicy tabGr1
}
P-122338
darko202
» 2014-12-06 14:11:03
1. nie możesz przekazać zmiennej lokalnej wyżej poza zakres jej widoczności

2. możesz przekazać wskaźnik na tablicę jako argument funkcji, który funkcja jakoś tam wypełni. Po wyjściu z funkcji tablicę masz wypełnioną.

C/C++
void wypisz( int w, int h, int * tab )
{
    for( int y = 0; y < h; ++y )
    {
        for( int x = 0; x < w; ++x )
             printf( "%d; ", tab[ y * w + x ] );
       
        printf( "\n" );
    }
}

void main
{
    ...
    int t[ 9 ][ 5 ];
    wypisz( 5, 9, & tab[ 0 ][ 0 ] );
    ..
}
P-122340
fisherek
Temat założony przez niniejszego użytkownika
» 2014-12-06 14:16:45
Czyli w moim przypadku będzie to wyglądać w ten sposób?

C/C++
void wypisz( int w, int h, char * tab )
{
    for( int y = 0; y < h; ++y )
    {
        for( int x = 0; x < w; ++x )
             tab[ y * w + x ] = '-';
       
    }
}

void main
{
    ...
    char t[ 7 ][ 7 ];
    wypisz( 7, 7, & tab[ 0 ][ 0 ] );
    ..
}
P-122342
darko202
» 2014-12-06 14:34:51
popatrz na http://cpp0x.pl/kursy/Kurs-C++​/1
rozdział 18

oraz załączony wcześniej przykład
w Twoim przypadku jest identycznie

1. przekazanie wskaźnika do funkcji
char generow_planszy(char* tabAut)
 
2 wywołanie funkcji przez odwołanie do referencji tablicy
  referencja tablicy jest jej element 1 czyli  tabAut[0][0]

   tabGr1 = generow_planszy(&tabAut[0][0]);

P-122347
fisherek
Temat założony przez niniejszego użytkownika
» 2014-12-06 15:19:14
Poczytałem. Zrozumiałem.
Dzięki za pomoc :)

a tu całość kodu dla mojego przypadku jeśli ktoś również będzie miał podobny problem.
C/C++
void wypisz( int w, int h, char * tab )
{
    for( int y = 0; y < h; ++y )
    {
        for( int x = 0; x < w; ++x )
             tab[ y * w + x ] = '-';
       
    }
}

int main()
{
   
    char t[ 9 ][ 5 ];
    wypisz( 5, 9, & t[ 0 ][ 0 ] );
   
    for( int i = 0; i < 9; i++ )
    {
        for( int j = 0; j < 5; j++ )
             cout << t[ i ][ j ] << " ";
       
        cout << endl;
    }
    return 0;
}
P-122351
« 1 »
  Strona 1 z 1