Wykład 1: Wskaźniki i zmienne dynamiczne

Podobne dokumenty
Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 12. Struktury, unie, pola bitowe. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 9: Polimorfizm i klasy wirtualne

Podstawy programowania. Wykład: 7. Funkcje Przekazywanie argumentów do funkcji. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 8: klasy cz. 4

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 5: Klasy cz. 3

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Wykład 9: Metody wirtualne i polimorfizm

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Podstawy programowania. Wykład: 13. Rekurencja. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

KURS C/C++ WYKŁAD 6. Wskaźniki

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

Programowanie w języku C++

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Wykład 3 Składnia języka C# (cz. 2)

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Lab 9 Podstawy Programowania

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Zmienne i struktury dynamiczne

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

Wskaźniki. Informatyka

Podstawy programowania w języku C++

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Podstawy programowania w języku C++

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Języki i metodyka programowania. Wskaźniki i tablice.

Programowanie obiektowe W3

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Język C++ Różnice między C a C++

Deklaracja struktury w C++

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

W dowolnym momencie można zmienić typ wskaźnika.

Podstawy programowania komputerów

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Wskaźniki w C. Anna Gogolińska

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Języki C i C++ Wykład: 1. Wstęp Budowa programu Operacje we/wy Instrukcje wyboru. dr Artur Bartoszewski - Języki C i C++, sem.

Stałe, tablice dynamiczne i wielowymiarowe

Podstawy Programowania Obiektowego

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Wykład nr 3. Temat: Wskaźniki i referencje. Edward Morgan Forster

Podstawy programowania. Podstawy C# Tablice

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Wykład VI PASCAL procedury i funkcje przekazywanie parametrów,

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Podstawy programowania w języku C++

Informatyka 1. Plan dzisiejszych zajęć. zajęcia nr 1. Elektrotechnika, semestr II rok akademicki 2008/2009

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Podstawy Programowania

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Wskaźniki. Programowanie Proceduralne 1

Języki i paradygmaty programowania

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Podstawy programowaniu. Wykład: 3. Budowa programu Operacje we/wy Instrukcje wyboru. dr Artur Bartoszewski - Podstawy programowania, sem.

dr inż. Jarosław Forenc

Podstawy programowania skrót z wykładów:

Wstęp do programowania obiektowego, wykład 7

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 8. Karol Tarnowski A-1 p.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Tablice, funkcje - wprowadzenie

Programowanie komputerowe. Zajęcia 4

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Informacja o programowaniu w c++ Dr Maciej Bobrowski

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Wprowadzenie do programowania w języku C

Techniki Programowania wskaźniki

Wykład 2 Składnia języka C# (cz. 1)

Podstawy Programowania C++

Transkrypt:

Programowanie obiektowe Wykład 1: Wskaźniki i zmienne dynamiczne 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Podstawy programowania w C++ Wskaźniki 2 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

Podstawy Pojęcie wskaźnika Wskaźnik na zmienną danego typu to zmienna, która przechowuje adres zmiennej danego typu. Zmienne są niczym innym jak tylko komórkami pamięci operacyjnej RAM. Zatem odwołując się do zmiennej poprzez jej nazwę odwołujemy się do przydzielonej jej pamięci. Wartością wskaźnika jest natomiast adres pamięci RAM, gdzie znajduje się taka zmienna. 3 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

Wskaźniki Definiowanie wskaźników typ_wskazywanego_obiektu * nazwa wskaźnika; Np.: int *wsk_na_int; char * wsk_na_znak; float * wsk_na_float; 4 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

Podstawy Pojęcie wskaźnika Aby uzyskać adres zmiennej statycznej, który można przechowywać w zmiennej wskaźnikowej posłużyć się można operatorem & Zdefiniowanie wskaźnika na int oraz zmiennej typu int Przekazanie adresu zmiennej do wskaźnika 5 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

Wskaźniki Posługiwanie się wskaźnikami Np.: int *x; definicja wskaźnika do obiektów typu int int st = 100; definicja obiektu typu int z liczbą 100 x = &st; cout << *x; cin >> *x; ustawienie wskaźnika na obiekt st wypisanie wartości obiektu wskazywanego przez x zapisanie wartości do wskaźnika 6 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

7

Wskaźniki Posługiwanie się wskaźnikami Wskaźniki jako argumenty funkcji - przekazując wskaźniki jako argumenty funkcji sprawiamy, że z wnętrza funkcji mamy pełny dostęp do zmiennych przekazanych jako argumenty (możemy je modyfikować). Efekt jest podobny jak przy przekazywaniu argumentów przez referencję. 8 dr Artur Bartoszewski - Programowanie obiektowe, sem. II - WYKŁAD

Podstawy programowania w C++ Zmienne dynamiczne 9

Zmienne dynamiczne Wskaźniki można zastosować do dynamicznej alokacji zmiennych czyli rezerwacji w pamięci obszarów do przechowywania zmiennych. Tak stworzona zmienna nie ma nazwy, lecz tylko adres. Adres ten przechowywany jest w statycznej zmiennej wskaźnikowej (lub bardziej skomplikowanej strukturze danych takiej jak lista lub drzewo binarne). 10

Zmienne dynamiczne Do dynamicznej alokacji zmiennych służy operator new 11 int *wsk; wsk = new int; Lub krócej: int *wsk = new int; Operator new na podstawie typu zmiennej (lub też typu i rozmiaru tablicy) przydzieli odpowiednią ilość pamięci. Jeśli przydział pamięci powiódł się, to wartość zmiennej wskaźnik będzie różna od zera. Jeśli wartość wskaźnika będzie równa 0, to pamięć nie została przydzielona. Wartość 0 bardzo często jest zastępowana stałą NULL (zalecane). Powody, dla których pamięć nie mogła zostać przydzielona to: Rozmiar bloku pamięci, który chcesz zarezerwować jest zbyt duży; System nie posiada więcej zasobów pamięci i w związku z tym nie może jej przydzielić.

Zmienne dynamiczne Do dynamicznej alokacji zmiennych służy operator new int *wsk; wsk = new int; Lub krócej: int *wsk = new int; Do usunięcia z pamięci zmiennej dynamicznej służy operator delete delete wsk; W języku C do przydzielania i zwalniania pamięci służyły głównie funkcje malloc() i free() w C++ zostały one zastąpione operatorami new i delete. 12

Zmienne dynamiczne Za pomocą operatora delete kasuje się tylko obiekty stworzone operatorem new Próba skasowania czegokolwiek innego jest błędem. Uwaga: nie należy dwukrotnie kasować obiektu. Wyjątkiem jest zastosowanie operatora delete w stosunku do wskaźnika pokazującego na adres zerowy (NULL) ponieważ żaden obiekt nie może mieć adresu 0 taka konstrukcja nie powoduje błędu. 13

Zmienne dynamiczne Często stosowana konstrukcja zabezpieczająca przed podwójnym kasowaniem obiektów: int *wskaznik new int; //.. delete wskaznik; wskaznik = NULL; //. delete wskaźnik; // nie spowoduje bledu 14

Zmienne dynamiczne Cechy obiektów dynamicznych. Obiekty utworzone dynamicznie istnieją od momentu, gdy je utworzymy operatorem new do momentu, gdy je skasujemy operatorem delete. Obiekt utworzony dynamicznie nie ma nazwy. Można nim operować tylko za pomocą wskaźników. Obiektów takich nie obowiązują zwykłe zasady o zakresie ważności (zasady mówiące w których miejscach programu są widzialne, a w których niewidzialne pomimo, że istnieją). Jeśli tylko jest w danym momencie dostępny choćby jeden wskaźnik, który na taki obiekt pokazuje, to mamy do tego obiektu dostęp. Obiekty dynamicznie nie są inicjalizowane zerami (po utworzeniu zawierają przypadkowe wartości). 15

Tablice dynamiczne Dynamiczna alokacja tablic: int *wsk; wsk = new int [1000]; Lub krócej: int *wsk = new int [1000]; Rozmiar tablicy nie musi być stałą. Wystarczy, że jego wartość będzie znana w momencie alokacji tablicy (niekoniecznie w momencie kompilacji programu) 16

Tablice dynamiczne Do usunięcia z pamięci dynamicznej tablicy służy konstrukcja: delete [] wsk; Jeśli przydzieliliśmy pamięć określając ilość elementów tablicy to musimy poinformować operator delete o tym, że wskaźnik wskazywał na tablicę inaczej usuniemy tylko jej pierwszy element. Aby to zrobić dopisujemy zaraz za operatorem nawiasy kwadratowe [ ]. Nie podajemy w nich rozmiaru tablicy, ponieważ operator sam ustala rozmiar bloku jaki został przydzielony. 17

Tablice dynamiczne 18

Tablice wskaźników W tablicy przechowywać można wszystkie rodzaje zmiennych prostych, w tym także wskaźniki adresami różnych miejsc w pamięci. int *tabl_wsk[1000]; 19

Tablica dynamiczna dwuwymiarowa Tablica dynamiczna dwuwymiarowa to tak naprawdę tablica wskaźników do poszczególnych wymiarów (tablic). Podczas deklaracji tablicy mamy pełną kontrolę nad wielkością poszczególnych wymiarów (tablic), statycznie nie da się osiągnąć takich efektów. 20

Tablica dynamiczna dwuwymiarowa Generowanie tablicy dwuwymiarowej dynamicznej odbywa dwuetapowo.: 1. tworzymy tablicę wskaźników wskazujących na tablicę 2. tworzymy tablice jednowymiarowe, które podczepiamy pod tablicę główną. int * * tablica2d Nazwa tablicy zapisana jest jako wskaźnik do wskaźnika do zmiennej (takiej jak przechowywane w tablicach podrzędnych) Tablica wskaźników do tablic podrzędnych Tablice drugiego wymiaru nie mają nazw tylko wskaźniki do początku zapisane w tablicy nadrzędnej 21

Tablica dynamiczna dwuwymiarowa 22

Literatura: W prezentacji wykorzystano przykłady i fragmenty: Grębosz J. : Symfonia C++, Programowanie w języku C++ orientowane obiektowo, Wydawnictwo Edition 2000. Jakubczyk K.: Turbo Pascal i Borland C++ Przykłady, Helion. Warto zajrzeć także do: Sokół R. : Microsoft Visual Studio 2012 Programowanie w Ci C++, Helion. Kerninghan B. W., Ritchie D. M.: język ANSI C, Wydawnictwo Naukowo Techniczne. Dla bardziej zaawansowanych: Grębosz J. : Pasja C++, Wydawnictwo Edition 2000. Meyers S.: język C++ bardziej efektywnie, Wydawnictwo Naukowo Techniczne 23