Zwracanie tablicy dynamicznej przez funkcje
Ostatnio zmodyfikowano 2016-12-14 18:07
GhostMaster Temat założony przez niniejszego użytkownika |
Zwracanie tablicy dynamicznej przez funkcje » 2016-12-14 14:02:33 Witam Posiadam program, w którego funkcji tworze sobie dynamiczna tablice, do której zapisuje wartości z pliku. Problem polega na tym, że pod koniec funkcji chciałbym zwrócić całą tablice do głównego programu i nie wiem jak to zrobić. int czytaj( FILE * plik_we, int * wymx, int * wymy ) { int i, j; int( * tablica )[ * wymx ]; tablica =( int( * )[ * wymx ] ) malloc( * wymx ** wymy * sizeof( int ) ); for( i = 0; i <* wymy; i++ ) { for( j = 0; j <* wymx; j++ ) { fscanf( plik_we, "%d", &( tablica[ i ][ j ] ) ) } } return tablica; }
Czy mógłby mi ktoś podać najłatwiejszy sposób jak to zrobić. |
|
michal11 |
» 2016-12-14 14:39:02 Ale ty chcesz zrobić tablice jednowymiarową czy dwuwymiarową? Dla jednowymiarowej wystarczy int * tab =( int * ) malloc( nums * sizeof( int ) );
dla wielowymiarowej int ** tab2 =( int ** ) malloc( numx * sizeof( int * ) );
for( int i = 0; i < numx; ++i ) { tab2[ i ] =( int * ) malloc( numy * sizeof( int ) ); }
chyba jakoś tak, pisałem z głowy i dawno nie musiałem tak tworzyć tablic więc może być jakiś błąd ale ogólnie idea jest chyba poprawna. int( * tablica )[ * wymx ]; . Niech mnie ktoś poprawi jeżeli się mylę, ale mi to wygląda na deklarację wskaźnika na tablicę "statyczną". |
|
Gibas11 |
» 2016-12-14 15:15:34 Nie zgadza ci się też zwracany typ. int ** czytaj( FILE * plik_we, int * wymx, int * wymy ) dla tablicy dwuwymiarowej a int * czytaj( FILE * plik_we, int * wymx, int * wymy ) dla jednowymiarowej. |
|
GhostMaster Temat założony przez niniejszego użytkownika |
» 2016-12-14 16:32:15 @michal11 Chce utworzyć tablice dwuwymiarową. Wcześniej robiłem tak jak pisałeś. Ogólnie to w obydwu sposobach tablica tworzy się poprawnie. @Gibas11 Zmieniłem typ na taki jak podałeś(do tablicy dwuwymiarowej) i zwracanie działa już prawidło. Problem mam tylko z tym, że nie wiem w jaki sposób mogę na tej tablicy operować już w programie głównym. Żeby pozmieniać jej wartości w poszczególnych komórkach czy chociażby ją wydrukować. |
|
czaffik |
» 2016-12-14 16:48:58 Dla tablicy dwuwymiarowej będzie działać tak: int ** tab = czytaj( f, wymx, wymy ); int i = 0; int j = 0; printf( "%d ", tab[ i ][ j ] );
Musisz tylko pamiętać żeby nie wyjść poza zakres tablicy bo bzdury wyjdą. Mi ten twój sposób deklarowania tablicy dwuwymiarowej nie działa jak trzeba, pluje się że nie można tego przypasować do int**, za to jak podaje @michal11 działa więc się zastanawiam czy to od kompilatora zależy?? |
|
michal11 |
» 2016-12-14 18:07:37 Możesz tworzyć tablicę 2d jako 1d ale wtedy sam musisz zadbać o poprawne odwoływanie się do indeksów i coś takiego tab[ i ][ j ] nie zadziała, trzeba prawdopodobnie tak tab[ i * sizey + j ] |
|
« 1 » |