Pokazivači

Ova lekcija prikazuje kratki opis pokazivača i njihove upotrebe u C#-u. Lekcija samo dotiče površinu komplicirane teme, međutim, ako se prvi put susrećete s pokazivačima preporučam vam da prije pročitate cijeli tutorijal i zatim isprobate primjere. Na sreću, pokazivači su u C#-u potrebni samo ondje gdje su brzina i performanse programa od velike važnosti. Notacija pokazivača Pokazivač je varijabla koja sadrži memorijsku adresu drugog tipa. U C#-u, pokazivači mogu biti deklarirani da sadrže memorijsku adresu vrijednosnog tipa (izuzev slučaj polja - pogledaj dolje). Pokazivači se deklariraju inplicitno, korištenjem simbola dereferenciranja *, kao što je prikazano u sljedećem primjeru: int *p; (Primjetite kako neko developeri postavljaju simbol dereferenciranja odmah poslije naziva tipa, npr: int* p; Ova varijacija radi isto tako kao i ona prethodna.) Ovom deklaracijom smo stvorili pokazivač p, koji će držati memorijsku lokaciju veličine integer-a (zapisan u 4 bitova). Kombinirani sintaktički element *p ('p' prefiksiran sa simbolom dereferenciranja '*') je korišten za referiranje tipa lociranog u memorijskoj lokaciji koju sadrži pokazivač p. Pokazivaču se može dodati vrijednost kao npr: *p = 5; Ovaj kod daje vrijednost 5 integer pokazivaču koji je instanciran u deklaraciju gore. Vrlo je važno, međutim, ovo dodjeljivanje sa dodjeljivanjem bez simbola dereferenciranja, kao npr: p = 5; Rezultat ovakvog dodjeljivanja je promjena memorijske lokacije koju sadrži p. Time se ne mijenja vrijednost integera instanciranog sa originalnom deklaracijom; to samo znači da p ne pokazuje na taj integer. U stvari, p će sada pokazivati na početak od 4 bajtova u memorijskoj lokaciji 5. Drugi vrlo važni simbol za korištenje indeksera je operator &, koji u kontekstu vraća memorijsku lokaciju varijable. Primjer djelovanja ovog simbola: int i = 5; int* i; p = &i; Dodan u primjer gore, kod *p = 10; mijenja vrijednost varijable i u 10, budući da se '*p' može shvatiti kao 'integer lociran u memoriji vrijednost drži u p'. Postoji još jedan vrlo važan dio notacije pokazivača. Pokazivači se mogu deklarirati za strukture (pogledajte lekciju 11), kao u sljedećem primjeru (koji koristi strukturu 'Koordinate' definiranu dalje u tutorijalu): Koordinate x = new Koordinate(); Koordinate *y = &x; Kad smo već deklarirali javni pokazivač y možemo pristupati vrijednsti polja x (preko z). To se može postići korištenjem sljedeće deklaracije. (*y).z ili zapisivanjem ekvivalentnog izraza, koji koristi oznaku -> : y -> z Nesiguran kod Velik problem kod korištenja pokazivača u C#-u je taj da C# operira u pozadini proces sakupljanja smeća. U nakani oslobađanja memorije, taj sakupljač smeća je u mogućnosti da promijeni memorijsku lokaciju trenutnog objekta bez upozorenja. Stoga će bilo koji pokazivač koji pokazuje na neki objekt prestati funkcionirati. Taj scenarij dovodi do dva potencijalna problema. Prvi se sastoji u tome što se može kompriitirati izvođenje C# programa. A drugi je da može utjecati na integritet drugih programa. Zbog ovih programa, korisnost pokazivača je strogo ograničena na kod koji je eksplicitno označen, sa strane programera, kao 'unsafe'. Zbog velikog rizika od malicioznog korištenja nesigurnog koda, programi koji sadrže nesiguran kod će se pokretati samo ako im je dana potpuna kontrola. Kako bi pojasnili problem kod sakupljanja smeća, zamislimo da smo deklarirali pokazivač unutar 'fiksnog' izraza. Time memorijska lokacija tipa ostaje statična, sigurna od sakupljača smeća. Primjetite kako fiksne izjave mogu biti korištene unutar konteksta nesigurnog koda. Bilo koje vrijednosti deklarirane unutar nesigurng koda su automatski 'fiksne' te će generirati greške tijekom kompiliranja ako su korištene izvan fiksnog izraza. Sljedeći kod demonstrira primjer metode koja je označena kao 'unsafe'. Iz prijašnjeg paragrafa slijedi da pokazivač p ne može biti deklariran unutar fiksne izjave na liniji 9, jer je p postavljen na strukturu c koja je deklarirana izvan nesigurnog koda. using System; public struct Koordinate { int x; int y; unsafe public static void Main() { Koordinate c = new Koordinate(); Koordinate *p = &c; { p->y = 6; (*p).x = 5; } Console.WriteLine(c.y); Console.WriteLine(c.x); } } Usporedite prethodni sa sljedećim kodom, u kojem će pokazivač na liniji 8 biti deklariran kao 'fixed', jer je postavljen da pokazuje na tip koji nije deklariran unutar nesigurnog bloka koda: using System; public struct Koordinate { int x; int y; unsafe public static void notMain(ref Koordinate c) { fixed (Koordinate *p = &c){ p->y = 6; (*p).x = 5; } Console.WriteLine(c.y); Console.WriteLine(c.x); } } U primjerima danim gore, 'unsafe' je uključeno kod modifikatra metode. Međutim, može se koristiti i kod bloka koda, kao kod sljedećeg koda: using System; public static void Main() { unsafe { Koordinate c = new Koordinate; //... } } Pokazivači, metode i polja Pokazivači se mogu osim kod vrijednostnih tpova korisiti i kod polja. Pokazivač se može deklarirati u vezu s poljem, kao u sljedećem primjeru: int[] a = {4, 5}; int* b = a; Ono što se događa u ovom kodu jest da je memorijska lokacija koju drži b, lokacija prvog tipa kojeg drži a. Prvi tip mora biti vrijednosni tip. Kod dolje prikazuje kako je moguće prijeći preko vrijednosti polja korištenjem pokazivača, ali objašnjavanje ovog izlazi iz granica ovo tutorijala. using System; public class Tester { public static void Main() { int[] a = {4, 5}; changeVal(a); Console.WriteLine(a[0]); Console.WriteLine(a[1]); } public unsafe static void changeVal(int[] a) { fixed (int *b = a) { *b = 5; *(b + 1) = 7; } } }

Western Europen time
 
Call of Duty 5
 
Iz neslužbenih izjava saznajemo kako bi se call of duty 5 mogao vratit u WWII
To su tek špekulacije, ali gdje ima dima ima i vatre.
Naslov će biti vrlo kreativan "World at war"(Svijet u ratu)
Novost je i to što nastavak određuje Treyarch , a ne stari,, pouzdani, dobri Infinity ward.
Ovaj put se bojište nalazi na Pacificu. Borba se odvija između Amerikanaca i Japanaca.
Prvi put u Call of Duty-u novo oružje- bacač plamena.
Držimo fige za WWII
Nova Fifa
 
Ovo je vjerojatno prvi put da pro evolution mora loviti fifu .
Naime ako neki čitatelji post-a neznaju fifa je u svojim trailerim-a pokazala evoluciju
u virtualnom nogometu.
Naime proevolution također ne zaostaje mnogo.
To će biti bitka godine(pretpostavljamo).
Nfs:UnderCover
 
EA je izdao novi nfs. Pod imenom UnderCover.
Navodno su u ovo izdanje uložili mnogo truda(što se nije vidjelo na carbonu).
Nfs se također napokon vraća na staze na kojima je najbolji(Ulice).
Linkovi
 
Mojn novi forum:
http://keli-master.net84.net
Odlični bologovi
myopinionabouteverything.blog.hr
teenworldlifemovie.blog.hr/
 
Today, there have been 2 visitors (2 hits) on this page!
Creative Commons License
Djelo Computers, čiji je autor Keli-master, ustupljeno je pod licencom Creative Commons Imenovanje-Nekomercijalno-Bez prerada 3.0 Hrvatska.
Bazirano na djelu koje se nalazi na keli-master.page.tl.
Dopuštenja koja prelaze okvire ove licence možda su dostupna na http://keli-master.page.tl. This website was created for free with Own-Free-Website.com. Would you also like to have your own website?
Sign up for free