Zadanie domowe
description
Transcript of Zadanie domowe
Zachodniopomorskie Centrum Edukacyjne
Zadanie domowe
Zachodniopomorskie Centrum Edukacyjne
Dynamiczna alokacja pamięci
Zachodniopomorskie Centrum Edukacyjne
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); for(int i=0;i<liczba_zmiennych;i++) cout<<wsk[i]; system("pause");
return 0;}
zm1
zm2
zm3
wsk
wsk[0] wsk[1] wsk[2]
Zachodniopomorskie Centrum Edukacyjne
Rozwiązanie zm1
zm1
zm2
zm2
zm3
zm3
wskwsk
wsk[0] wsk[1] wsk[2]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;
}
Zachodniopomorskie Centrum Edukacyjne
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.
Zachodniopomorskie Centrum Edukacyjne
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 ;}
Zachodniopomorskie Centrum Edukacyjne
Po co dynamiczna alokacja pamięci?
I. Sposób - tradycyjnyconst ROZMIAR_TABLICY = 100;double zwykła_tablica[ ROZMIAR_TABLICY ];
II. Sposób - dynamicznyint rozmiar_tablicy; cout << ”Ile liczb chcesz wprowadzić: ” ; cin >> rozmiar_tablicy ;double ∗tablica_dynamiczna; tablica_dynamiczna = new
double[ rozmiar_tablicy ]; • • •delete [ ] tablica_dynamiczna;