Microsoft Word - 11 Pokazivaci

Слични документи
3.Kontrlne (upravlja~ke) strukture u Javi

Uvod u računarstvo 2+2

PROMENLJIVE, TIPOVI PROMENLJIVIH

Microsoft Word - 02 Elementi programskog jezika Pascal

Funkcije predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

P11.3 Analiza zivotnog veka, Graf smetnji

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Uvod u računarstvo 2+2

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

Funkcije predavač: Nadežda Jakšić

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

PASCAL UVOD 2 II razred gimnazije

NIZOVI

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

PowerPoint Presentation

Generated by Foxit PDF Creator Foxit Software For evaluation only. Operativni sistem U računarstvu, operativni sistem (OS

KDP

ELEKTROTEHNIČKI FAKULTET, UNIVERZITET U BEOGRADU KATEDRA ZA ELEKTRONIKU UVOD U ELEKTRONIKU - 13E041UE LABORATORIJSKA VEŽBA Primena mikrokontrolera

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvrsnog_Programa [Compatibility Mode]

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

RACUNARSKA ELEKTRONIKA – VEŽBE 3

PowerPoint Presentation

Algoritmi i arhitekture DSP I

` 1.Врсте меморије На основу начина чувања података делимо их на меморије које привремено чувају податке (док је рачунар укључен) и меморије које трај

Fortran

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Microsoft Word - CAD sistemi

Slide 1

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Strukture predavač: Nadežda Jakšić

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

Pojačavači

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Programiranje za UNIX Okruženje unix procesa

Slide 1

P1.2 Projektovanje asemblera

Inženjering informacionih sistema

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

Programiranje 2 7. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 7. predavanje p. 1/7

Увод у организацију и архитектуру рачунара 1

TEORIJA SIGNALA I INFORMACIJA

Logicko projektovanje racunarskih sistema I

Slide 1

Повезивање са интернетом

Osnovi programiranja Beleške sa vežbi Smer Računarstvo i informatika Matematički fakultet, Beograd Jelena Tomašević i Sana Stojanović November 7, 2005

Microsoft PowerPoint - PRI2014 KORIGOVANO [Compatibility Mode]

PHP kod

Задатак 4: Центрифугална пумпа познате карактеристике при n = 2900 min -1 ради на инсталацији приказаној на слици и потискује воду из резервоара А у р

1, 2, 3, кодирај! Активности циклуса 4 Пројект «Аркадне игре» - Час 6: Програмирање падања новчића (наставак) Доминантна дисциплина Математикa Резиме

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

070-ALIP2-udzbenik.indb

P9.1 Dodela resursa, Bojenje grafa

1. OPĆE INFORMACIJE 1.1. Naziv kolegija Programiranje 1.6. Semestar Nositelj kolegija dr.sc. Bruno Trstenjak, v. pred Bodovna vrijednost

RAČUNARSKI SISTEM Ne postoji jedinstvena definicija pojma računarski sistem. Računarski sistem predstavlja skup mašina i pridruženih metoda (realizova

Slide 1

12 Stanje

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

P11.2 Izbor instrukcija, IBURG

Teorija skupova - blog.sake.ba

OPIS RAČUNARSKOG SISTEMA Računarski sistem se sastoji od procesora, operativne memorije, tajmera i terminala. Sve komponente računarskog sistema su me

1

Microsoft PowerPoint - 12a PEK EMT VHDL 1 od 4 - Uvod (2011).ppt [Compatibility Mode]

PowerPoint Presentation

Шифарник основа приговора на рад банака, давалаца финансијског лизинга, платних институција, институција електронског новца и јавног поштанског

Document ID / Revision : 0419/1.1 ID Issuer Sustav (sustav izdavatelja identifikacijskih oznaka) Upute za registraciju gospodarskih subjekata

Sveucilište u Zagrebu

РЕПУБЛИКА СРБИЈА МИНИСТАРСТВО ПРИВРЕДЕ ДИРЕКЦИЈА ЗА МЕРЕ И ДРАГОЦЕНЕ МЕТАЛЕ Београд, Мике Аласа 14, ПП: 34, ПАК: телефон: (011)

РЕПУБЛИКА СРБИЈА МИНИСТАРСТВО ПРИВРЕДЕ ДИРЕКЦИЈА ЗА МЕРЕ И ДРАГОЦЕНЕ МЕТАЛЕ Београд, Мике Аласа 14, ПП: 34, ПАК: телефон: (011)

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

Drugi kolokvij iz predmeta Operacijski sustavi 2. srpnja Napomene: PISATI ČITKO! Zadatke 7-10 rješavati na ovom papiru ili uz njih napisati "na

Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: min c T x Ax = b x 0 x Z n Gde pretpostavljamo da je A celobrojna matrica

Državno natjecanje / Osnove informatike Srednje škole Zadaci U sljedećim pitanjima na odgovore odgovaraš upisivanjem slova koji se nalazi ispred

Zadatak T=5: Jedinica WBSD propušta vred Potiče iz polja Rwb.LMD Signal Rwb.WRLMD izaziva propuštanje ove vrednosti 2. Vrednost 0000

Microsoft Word - MySQL_3.doc

AR2019

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Računarski softver Da bi računarski sistem mogao da radi, pored hardvera mora biti opremljen i odgovarajućim programima koji će njime upravljati.ova k

Objektno orjentirano programiranje 2P

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

Grananje u programu predavač: Nadežda Jakšić

Prikaz znakova u računalu

PowerPoint Presentation

Microsoft Word - Java_introduction_NEW_SYLLABUS.doc

РЕПУБЛИКА СРБИЈА МИНИСТАРСТВО ПРИВРЕДЕ ДИРЕКЦИЈА ЗА МЕРЕ И ДРАГОЦЕНЕ МЕТАЛЕ Београд, Мике Аласа 14, поштански преградак 34, ПАК телефон:

Studijski primer - Dijagrami toka podataka Softverski inženjering 1

P1.0 Uvod

Транскрипт:

Pokazivači U dosadašnjem radu smo imali prilike da koristimo promenljive koje smo deklarisali na početku nekog bloka. Prilikom deklaracije promenljiva dobija jedinstveni naziv i odgovarajući prostor u memoriji u kome će biti smeštena njena vrednost. Vrednost neke promenljive se može pročitati ili zapisati korišćenjem naziva te promenljive. Ovako deklarisane promenljive su vidljive samo u okviru bloka u kome su deklarisane, a njihov životni vek počinje istovremeno sa početkom izvršavanja tog bloka. Nakon završetka izvršavanja određenog bloka, sve promenljive deklarisane u njemu se automatski brišu iz memorije. Promenljive deklarisane na ovaj način često nazivamo statičkim promenljivama, a ovu vrstu obezbeđivanja memorije (alokacija memorije) nazivamo statička alokacija. Nedostatak statičkog alociranja je nemogućnost da se za vreme izvršavanja programa promeni adresa ili veličina memorijskog prostora koji je dodeljen promenljivoj. Na primer, prilikom deklarisanja nizova neophodno je da u trenutku pravljenja programa znate maksimalan broj elemenata, što često nije slučaj. U realnim problemima najčešće je potrebno alocirati memorijski prostor određene veličine na osnovu informacije koja nije poznata prilikom pravljenja programa, već je ona rezultat izvršavanja programa. Takav način alociranja memorije se naziva dinamičko alociranje. Dinamičko alociranje moguće je ostvariti korišćenjem posebne vrste promenljivih koje nazivamo pokazivačima ili pointerima. Pokazivači i memorija Memoriju računara možemo posmatrati kao niz numerisanih (adresiranih) memorijskih ćelija, kojima se može pristupati pojedinačno ili u povezanim grupama. Najmanja memorijska jedinica (ćelija) kojoj se može pritupiti je bajt. U zavisnosti od kompajlera jedan bajt memorije je dovoljan za čuvanje jednog char podatka, dva bajta mogu čuvati integer, a četiri uzastopna bajta mogu da formiraju real. Slično, za smeštanje pokazivača se najčešće koriste grupe od dve ili četiri uzastopne ćelija (bajta). Pokazivač (pointer) je promenljiva koja sadrži adresu neke druge promenljive. Prilikom programiranja pokazivači mogu biti veoma moćan alat, koji omogućava pisanje kompaktnijeg i efikasnijeg koda. Međutim, njihovo nepravilno korišćenje može ozbiljno narušiti čitljivost i funkcionalnost programa. S obzirom da pokazivač predstavlja adresu određene promenljive u memoriji, često kažemo da pokazivač pokazuje na neku promenljivu. Na sledećoj slici je shematski prikazana situacija u memoriji kada pokazivač pokazuje na promenljivu tipa char. Slika ### Pokazivač pokazuje na promenljivu tipa char Pokazivači u Pascal-u U programskom jeziku Pascal pokazivače deklarišemo na sličan način kao i sve druge promenljive, sa tom razlikom što ispred tipa promenljive dodajemo i znak ^. Navedeni tip sada označava tip podatka na koji pokazivač pokazuje. Kada jednom deklarišemo pokazivač na određeni tip podatka, ovaj tip više nije moguće menjati i pokazivač može pokazivati samo na promenljive tog tipa. Sintaksa type <pokazivacki_tip>=^<tip_podatka_na_koji_pokazuje>; odnosno var <pokazivacka_promenljiva>:^<tip_podatka_na_koji_pokazuje>; 1

Primer type pokazivac=^integer; knjiga= record naslov:string[30]; autor:string[20]; broj_strana:integer; end; var p:pokazivac; q:^integer; pok:^char; pk:^knjiga; Da bismo dobili adresu neke promenljive u memoriji, koristimo operator @. Tako linija p:=@c; pokazivaču p dodeljuje adresu promenljive c i tada kažemo da p pokazuje na c, kao što je prikazano na Slici ###. Slika ### Pokazivač p pokazuje na promenljivu c Ukoliko imamo pokazivač na neku promenljivu, toj promenljivoj možemo pristupiti korišćenjem operatora ^, koji se još naziva i operator dereferenciranja. Pretpostavimo da imamo pokazivač p koji pokazuje na celobrojnu promenljivu a, kao što je prikazano na Slici ###. Slika ### Pokazivač p pokazuje na celobrojnu promenljivu a U tom slučaju linija writeln(p^); štampa sadržaj memorijske lokacije na koju pokazuje p, što je u ovom slučaju broj 5, a linija p^:=3; ovoj memorijskoj lokaciji dodeljuje vrednost 3, čime je posredno i promenljiva a dobila vrednost 3. Pokazivači na slogove se ponašaju na potpuno isti način kao i pokazivači na proste tipove podataka. Ukoliko je, na primer, pk pokazivač na slog knjiga iz prethodnog primera, onda bi se konkretnom slogu pristupаlo sa pk^, a članici sloga sa pk^.naslov. Na sledećem primeru možemo videti kako se deklarišu pokazivači i kako se mogu koristiti operatori @ i ^. var x,y:integer; z:array[1..20] of integer; k:knjiga; p:^integer; /* p je pokazivac na int */ pk:^knjiga;... x:=5; y:=1; p:=@x; /* p sada pokazuje na x */ 2

y:=p^; /* y sada ima vrednost 5 */ p^:=0; /* x sada ima vrednost 0 */ p:=@z[5]; /* p sada pokazuje na z[5] */ pk:=@k; /* pk sada pokazuje na knjigu k */ pk^.naslov:='na Drini cuprija'; /* naslov knjige na koju pokazuje pk je Na... */ U prethodnom primeru smo videli da se pokazivač p deklariše pomoću var p:^integer; što bi moglo da se čita kao p pokazuje na integer, ili p^ je integer. Iz ovoga zaključujemo da se pokazivač deklariše kao pokazivač na tačno određeni tip podatka i ne može se koristiti za pokazivanje na neki drugi tip. Ukoliko pokazivač pokazuje na celobrojnu promenljivu x, p^ se može pojaviti u bilo kom kontekstu gde bi se moglo pojaviti i x. Na primer: p^:=p^+12; uvećava p^ za 12, a samim tim uvećava i x za 12. Unarni operatori @ i ^ imaju veći prioritet od aritmetičkih operatora, tako da y:=p^+5; prvo uzima vrednost na koju pokazuje p, uvećava je za 5 i dodeljuje promenljivoj y. S obzirom da su pokazivači promenljive kao i sve druge, moguće je njihovo korišćenje i bez dereferenciranja. Jedan od primera je i dodeljivanje vrednosti jednog pokazivača drugom: q:=p; čime se vrši kopiranje sadržaja pokazivača p u pokazivač q, tako da sada pokazivač q pokazuje na istu memorijsku lokaciju, na koju pokazuje i pokazivač p, kao što je prikazano na Slici ###. Slika ### Dodeljivanje vrednosti pokazivača p pokazivaču q Za razliku od toga, linija q^:=p^; podatku na koji pokazuje pokazivač q dodeljuje vrednost na koju pokazuje pokazivač p, kao na Slici ###. Slika ### Dodeljivanje vrednosti na koju pokazuje p podatku na koji pokazuje q. 3

Dinamičko alociranje memorije U prethodnoj sekciji smo se sretali sa pokazivačima na neke postojeće, statički deklarisane promenljive. Korišćenjem ovih pokazivača posredno je moguće dodeliti ili očitati vrednost promenljivih na koju pokazivači pokazuju. Međutim, najveća prednost korišćenja pokazivača je to što se njima može dodeliti odgovarajući memorijski prostor bilo kada tokom izvršenja programa, nezavisno od statički deklarisanih promenljivih. Alociranje novog memorijskog prostora na koji će pokazivati određeni pokazivač vrši se korišćenjem naredbe new. Nareba new obezbeđuje memorijski prostor čija veličina odgovara tipu podatka na koji pokazivač naveden unutar naredbe pokazuje. Na primer, ukoliko je pokazivač p deklarisan kao pokazivač na integer var p:^integer; onda će linija new(p); obezbediti memorijski prostor za jedan ceo broj, a adresu te memorijske lokacije dodeliti pokazivaču p, kao što je prikazano na Slici ### Slika ### Dodeljivanje memorijskog prostora korišćenjem naredbe new Od tog trenutka pokazivač p pokazuje na celobrojni podatak u memoriji, kome se može pristupiti korišćenjem operatora ^. Na Slici ### dat je grafički prikaz različitih operacija nad pokazivačima. Slika ### Šematski prikaz rezultata različitih operacija nad pokazivačima Kao što smo ranije pomenuli vrednost na koju pokazuje jedan pokazivač se može dodeliti podatku na koji pokazuje drugi pokazivač (Slika ###a). Takođe, pokazivaču se može dodeliti vrednost drugog pokazivača, čime se on praktično usmerava da pokazuje na isti podatak kao i drugi pokazivač (Slika ###). 4

Slika ### Dodeljivanje pokazivača po vrednosti (a) i po adresi (referenci) (b) Na Slici ###b smo mogli videti da nakon dodeljivanja vrednosti pokazivača p pokazivaču q, ne postoji pokazivač koji pokazuje na podatak na koji je do tada pokazivao pokazivač q. To znači da od tog trenutka ne postoji mogućnost pristupa toj memorijskoj lokaciji. Iako se taj memorijski prostor više ne koristi, on bespotrebno zauzima memoriju. Iz tog razloga potrebno je sve memorijske lokacije koje su zauzete korišćenjem naredbe new osloboditi po prestanku potrebe za njima. Oslobađanje zauzete memorije obavlja se korišćenjem naredbe dispose: dispose(q); Pozivanjem prethodne naredbe oslobađa se memorija na koju je pokazivao pokazivač q, a njegova vrednost postaje nedefinisana. Napomenimo i to da pokazivač može da ne pokazuje ni na jednu memorijsku lokaciju i tada on ima vrednost NIL. S obzirom da pokazivač sa ovom vrednosšću ne pokazuje ni na šta, korišćenje operatora ^ će izazvati grešku prilikom izvršavanja programa. 5