• Nie Znaleziono Wyników

Ćwiczenia 10 Podstawy programowania – Dynamiczna alokacja pamięci

N/A
N/A
Protected

Academic year: 2021

Share "Ćwiczenia 10 Podstawy programowania – Dynamiczna alokacja pamięci"

Copied!
4
0
0

Pełen tekst

(1)

Ćwiczenia 10

Podstawy programowania – Dynamiczna alokacja pamięci

W języku C++ wprowadzono operatory new i delete związane z dynamiczną alokacją.

Operator new służy do tworzenia obiektów dynamicznych, a operator delete do usuwania obiektów dynamicznych ( dealokacji pamięci).

Składnia stosowana dla operatora new ma postać nastepującą:

nazwa_wskaźnika=new typ;

lub

nazwa_wskaźnika=new typ( wartosc_poczatkowa);

Powyższe konstrukcje mogą też wystąpić przy inicjalizacji.

Przykład:

Alokacja zmiennych dynamicznych przy użyciu operatora new:

int *px=new int; // inicjalizacja wskaźnika px adresem zmiennej dynamicznej bez inicjalizacji int *py=new int (10); // podobnie jak powyżej, ale inicjalizacją zmiennej dynamicznej wartością 10 double *pv,*pz;

pz=new double;

pv=new double(30);

Składnia operatora delete ma formę następującą:

delete nazwa_wskaźnika;

Jeżeli próba przydzielenia pamięci jest udana i zostanie przydzielona pamięć, operator new zwraca wskaźnik do przydzielonego obszaru pamięci ( wskaźnik do piewszego bajtu). Przydzielony obszar nie ma nazwy, która pełniłaby rolę l-wartości, stąd role tę pełni wyrażenie *nazwa_wskaźnika, np. *px.

Operatory new i delete mogą być też stosowane do dynamicznej alokacji tablic. Alokacja taka ma postać:

nazwa_wskaźnika=new typ[rozmiar];

nazwa_wskaźnika jest nazwą zmiennej wskażnikowej, typ jest typem elementów alokowanej tablicy, a rozmiar oznacza liczbę elementów.

Możliwa jest także alokacja przy inicjalizacji w następującej formie:

typ nazwa_wskaźnika=new typ[rozmiar];

Dealokacja przy użyciu operatora delete ma postać:

delete[ ]nazwa_wskaźnika;

(2)

Przykład:

Użycie operatorów new i delete.

Zadania:

1. Napisz program, który dynamicznie zaalokuje zmienną typu int. Program powinien wczytać z klawiatury wartość i podstawić ją do zaalokowanej zmiennej. Następnie program powinien wydrukować na ekranie wartość zmiennej, po czym zwolnić pamięć i zakończyć działanie.

2. Napisz program, który dynamicznie zaalokuje tablicę typu int I wypełni ją kolejnymi liczbami, a na koniec zwolni pamięć.

3. Napisz program definiujący strukturę Punkt zawierającą pola X i Y (współrzędne punktu).

Stwórz wskaźnik do tej zmiennej za pomocą operatora new. Wczytaj z klawiatury wartości pól tej zmiennej I przypisz je do niej z użyciem wskaźnika.

4. Stwórz funkcję RezerwujTablice która przyjmuje jako parameter wejściowy rozmiar tablicy (liczba całkowita), rezerwuje pamięć na tablicę typu float o zadanym rozmiarze I zwraca wskaźnik do niej. Pokaż użycie tej funkcji na przykładzie.

5. Ćwiczenie do nauki:

1) Znaku końca łańcucha '\0'

2) Alokacji pamięcia za pomocą ‘new’

3) Usuwania pamięci za pomocą ‘delete’

(3)

Przekonwertuj zmienną ‘ch’ w zmienną wskaźnikową stworzoną za pomocą operatora new.

#include < iostream.h >

int main() {

char ch = 'Z';

char *string = NULL;

string = new char[2]; // tutaj zaalokowałem pamięć, dlaczego na 2 znaki ?

/* Zapisz tutaj konstrukcję string’a */

cout << string << endl;

/* użyj operatora delete */

return 0;

}

Zadanie domowe:

1. Napisz program, który będzie wczytywał z klawiatury (lub jako parameter wywołania programu) jedną liczbę – rozmiar macierzy, np. 3. Następnie będzie alokował pamięć na trzy macierze typu float o zadanym rozmiarze, np. 3x3. W kolejnym kroku program ma wypełnić dwie z nich losowymi liczbami z przedziału od -10 do 10 (wykorzystaj funkcję rand() z biblioteki cstdlib). Następnie program ma wykonać mnożenie tych dwóch macierzy i wynik zapisać w trzeciej, do tej pory pustej. Na koniec program ma wypisać wszystkie trzy macierze na ekran i zwolnić zaalokowaną pamięć.

2. Stwórz program, który będzie implementował ideę listy łączonej (patrz rysunek)

Każdy element (noda) listy ma być zmienną strukturalną zawierającą dwa elementy: liczbę typu int (info) oraz wskaźnik na kolejny element (link).

(4)

Zaimplementuj tworzenie takiej listy n elementowej, gdzie n podawane jest z klawiatury przez użytkownika. Wypełnij elementy listy (info) losowymi liczbami. Ustaw odpowiednio wskaźniki wszystkich elementów. Na koniec wypisz zawartość całej listy (parameter info) przechodząc po niej za pomocą wskaźników.

Cytaty

Powiązane dokumenty

Napisz funkcję UstalLiczbeCalkowita, która zwraca jako wartość wskaźnik do zmiennej typu int.. Zadaniem funkcji jest zaalokowanie zmiennej oraz ustalenie jej wartości

Napisz program, który prosi użytkownika o wpisanie dwóch liczb, które zapisywane są następnie w zmiennych ‘a’ oraz ‘b’. Przypisz do nich odpowiednio zmienne ‘a’

Przywiązanie klienta do konkretnego portu Port, na którym klient nasłuchuje. Przepięcie klienta na nowy port, w celu zwolnienia portu

Za prawid áową odpowiedĨ uznaje siĊ równieĪ odpowied Ĩ: „jĊzyk áaciĔski” albo „áacina”. Więcej arkuszy znajdziesz na

// utworzono tablicę 10 referencji typu String, należy dla każdego elementu tablicy przydzielić pamięć.  Przydział pamięci na elementy obiektowe

Natomiast wartością funkcji memccpy jest adres bajtu w obszarze docelowym (d), który znajduje się bezpośrednio za poszukiwanym bajtem, lub NULL, jeśli

inicjowanie wskaźnika na obszar pamięci o ustalonym adresie i rozmiarze; wczytywanie do pamięci pliku o rozmiarze przekraczającym rozmiar segmentu (64KB).. Opracować

Zadanie 9.10. Napisz funkcj˛e, która sprawdzi, czy macierz jest symetryczna. Dana jest macierz kwadratowa A o warto´sciach rzeczywistych typu n×n. Dla danej macierzy kwadratowej