70 likes | 234 Views
Zadanie domowe. Dynamiczna alokacja pamięci. Ciekawa funkcja – stawiamy problem. Jak spowodować aby funkcja „zwróciła” kilka wartości naraz? int main ( int argc , char* argv []) { int liczba_zmiennych = 3; int * wsk ; wsk = wprowadz_dane ( liczba_zmiennych );
E N D
Ciekawa funkcja – stawiamy problem • Jak spowodować aby funkcja „zwróciła” kilka wartości naraz? intmain(intargc, char* argv[]) { intliczba_zmiennych = 3; int *wsk; wsk = wprowadz_dane(liczba_zmiennych); for(int i=0;i<liczba_zmiennych;i++) cout<<wsk[i]; system("pause"); return 0; } wsk zm1 zm2 zm3 wsk[0] wsk[1] wsk[2]
wsk Rozwiązanie zm1 zm2 zm3 wsk[0] wsk[1] wsk[2] int * wprowadz_dane(int l_z){ int *t = new int[l_z]; int *tmp = t; for(int i=0;i<l_z;i++) { cin>>*t++; } return tmp; }
Co daje alokacja pamięci • Mając styczność z tablicami można się zastanowić, czy nie dałoby się mieć tablic, których rozmiar dostosowuje się do naszych potrzeb a nie jest na stałe zaszyty w kodzie programu. • Chcąc pomieścić więcej danych możemy po prostu zwiększyć rozmiar tablicy - ale gdy do przechowania będzie mniej elementów okaże się, że marnujemy pamięć. • Język C umożliwia dzięki wskaźnikom i dynamicznej alokacji pamięci tworzenie tablic takiej wielkości, jakiej akurat potrzebujemy.
Po co dynamiczna alokacja pamięci? int∗ wsk ; // wskaźnik na zmienną typu całkowitego wsk = new int ; // utworzenie nowego obiektu //(nowej zmiennej int) if( wsk != NULL ) { ∗wsk = 10 ; // przypisanie wartości (poprzez wskaźnik) cout<<∗wsk; // wydrukowanie zawartości zmiennej dynam. • • • delete wsk ; }
Po co dynamiczna alokacja pamięci? • Sposób - tradycyjny constROZMIAR_TABLICY = 100; double zwykła_tablica[ ROZMIAR_TABLICY ]; II. Sposób - dynamiczny introzmiar_tablicy; cout << ”Ile liczb chcesz wprowadzić: ” ; cin >> rozmiar_tablicy ; double ∗tablica_dynamiczna; tablica_dynamiczna = new double[ rozmiar_tablicy ]; • • • delete [ ] tablica_dynamiczna;