[C++] Zwracanie przez funkcję tablicy dwuwymiarowej
Ostatnio zmodyfikowano 2014-12-06 15:19
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ć? 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(); }
|
|
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ą. 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 ] ); .. }
|
|
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? 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 ] ); .. }
|
|
darko202 |
» 2014-12-06 14:34:51 popatrz na http://cpp0x.pl/kursy/Kurs-C++/1rozdział 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]); |
|
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. 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; }
|
|
« 1 » |