Tablica dynamiczna przekazywana przez funkcję
Ostatnio zmodyfikowano 2016-03-30 20:36
Artik94 Temat założony przez niniejszego użytkownika |
Tablica dynamiczna przekazywana przez funkcję » 2016-03-28 15:26:38 Mam funkcję i program: int nowa_tablica( int * tab, int N ) { int * tab2; tab2 =( int * ) malloc( N * sizeof( int ) ); for( int i = 0; i < N; i++ ) { tab2[ i ] = tab[ i ] + 5; printf( "tab2[%d] = %d \n", i, tab2[ i ] ); } return * tab2; }
int main() { int N; int * tab; int * tab3; N = 10; tab =( int * ) malloc( N * sizeof( int ) ); for( int i = 0; i < 10; i++ ) { tab[ i ] = i; printf( "tab[%d] = %d \n", i, tab[ i ] ); } printf( "\n\n" ); tab3 = nowa_tablica( tab, 10 ); for( int i = 0; i < 10; i++ ) { printf( "tab3[%d] = %d \n", i, tab3[ i ] ); }
Prawdopodobnie coś jest nie tak w części "tab3 = nowa_tablica(tab, 10); " . Próbowałem to zmieniać na każdy sposób, ale nie wiem jak to połączyć. Proszę o pomoc.[/i][/i] |
|
carlosmay |
» 2016-03-28 16:20:50 tab3 jest wskaźnikiem, a funkcja zwraca "wartość" pierwszego elementu tablicy tworzonej w funkcji, nie wskaźnik. Nijak nie da się tego pogodzić.
Zwróć wskaźnik na nową tablicę. |
|
Rashmistrz |
» 2016-03-28 16:40:05 zwracasz wyłuskany wskaźnik tab2, czyli zwracasz to na co on wskazuje. Jeśli chciałeś zwrócić wskaźnik bez wyłuskania go: return tab2; Nie zapomnij zmienić też deklaracji funkcji: int nowa_tablica( int * tab, int N ) { (Zwracasz wskaźnik, prawda?) int * nowa_tablica( int * tab, int N ) { ___________________________________________________________ tab3 = nowa_tablica( tab, 10 ); for( int i = 0; i < 10; i++ ) { printf( "tab3[%d] = %d \n", i, tab3[ i ] );
Reszta błędów wynikała właśnie z tego... że zwracałeś liczbę, a nie wskaźnik, a potem wyłuskiwałeś liczbę jako wskaźnik. (który "wskazywał" nie twoje dane) ___________________________________________ Po moich wskazówkach program u mnie wypisał: tab[0] = 0 tab[1] = 1 tab[2] = 2 tab[3] = 3 tab[4] = 4 tab[5] = 5 tab[6] = 6 tab[7] = 7 tab[8] = 8 tab[9] = 9
tab2[0] = 5 tab2[1] = 6 tab2[2] = 7 tab2[3] = 8 tab2[4] = 9 tab2[5] = 10 tab2[6] = 11 tab2[7] = 12 tab2[8] = 13 tab2[9] = 14 tab3[0] = 5 tab3[1] = 6 tab3[2] = 7 tab3[3] = 8 tab3[4] = 9 tab3[5] = 10 tab3[6] = 11 tab3[7] = 12 tab3[8] = 13 tab3[9] = 14
|
|
Artik94 Temat założony przez niniejszego użytkownika |
» 2016-03-30 20:36:37 Ogromnie dziękuję! |
|
« 1 » |