120 likes | 270 Views
struct. ime. ;. }. {. deklaracija. 2 . Strukture , unije i polja bitova Potreba za podacima mešovitog tipa. Sintaksa strukture u C-u :. struct ime { tip komponenta1; tip komponenta2; ………… };. Primer: Ako defini š emo strukturu: struct ucenik { char ime[30];
E N D
struct ime ; } { deklaracija 2. Strukture, unije i polja bitova Potreba za podacima mešovitog tipa. Sintaksa strukture u C-u: struct ime { tip komponenta1; tip komponenta2; ………… };
Primer: Ako definišemo strukturu: struct ucenik { char ime[30]; char skola[40]; int razred; }; koristimo je u deklariciji promenljivih (kao i svaki tip podataka): int m, k; struct ucenik prvi, drugi; Jedina operacija definisana nad promenljivima strukturnog tipa je operacija dodele, koja se primenjuje samo na promenljive istog struktirnog tipa. Dakle, (za pethodnu deklarciju) možemo pisati: prvi =drugi;
Može se izvršiti i deklaracija na sledeći način: struct ucenik { char ime[30]; char skola[40]; int razred; } ucenik1, ucenik2; Promenljiva strukturng tpa može se inicijalizovati. Tako, možemo pisati: struct ucenik prvi = { “Petra Peric”, “Mat. gimnazija”, 3 };
2.1. Pristup komponentama strukture Za pristup komponentama strukture koristi se “tačka –notacija”. Komponetama se pristupa preko imena strukture i imena komponente, s tim što se ime strukture razdvaja od imena komponente tačkom. Dakle, pišemo: <ime strukturne promenljive>.<ime komponente> Sa komponentama strukture operiše se kao i sa drugim promenljivim veličinama. Ako smo deklarisa promenljive prvi i drugi da budu tipa ucenik, možemo pisati: prvi.ime = “Ana Stanic”; x= drugi.razred+1; drugi.skola = “Mat. gimnazija”; Djak1.cpp
Kao tip unutar strukture može se pojaviti ma koji tip pa i drugi strukturni tip. Primer 1:Primer 2: struct naziv { struct tacka { char ime[20]; int x; char prezime[20]; int y; } } struct profa{ struct duz{ struct naziv imep; struct tacka pocetna; char predmet[30]; struct tacka krajnja; int godina; }; }; Sada možemo pisati: struct duz prva; duz.cpp prva.pocetna.x=3; duz1.cpp prva.pocetna.y=4;
2.2. Strukture i pokazivači Strukturne promenljive imaju svoje adrese pa ima smisla koristiti pokazivače. Pokazivači se koriste na isti način kao i sa drugim tipovima podataka: da bi pokazivač ukazivao na strukturni tip podatka, mora biti deklarisan kao strukturni. Dakle, ima smisla pisati: struct ucenik *djak; Komponentama strukture sada pristupamo preko pokazivača na sledeći način: (*djak).ime, (*djak).skola, (*djak).razred. Ako koristimo pokazivače, komponentama strukture, možemo pristupiti i korišćenjem operatora . Dakle, možemo pisati: djak ime djak skola djak razred. Autorstr.cpp AutoStr1.cpp
union ime ; } { deklaracija 2.3. Unije Unija je slična strukturi po načinu deklarisanja. Sintaksa unije u C-u je: union ime { tip komponenta1; tip komponenta2; ………… }; Svi elementi unije koriste isti memorijski prostor. U jednom trenutku semože koristiti samo jedan element unije.
Primer: Ako definišemo uniju: union prva { int i; float f; double d; }; tada imaju smisla deklaracije: union prva au; union prva niz]10]; union prva *pok; Niz unija podataka često se koristi za čuvanje različiih tipova poadataka koji su svi iste dužine.Redosled podataka ne mora biti pravilan, niti poznat unapred. int float doule
Podacima u uniji se pristupa na isti način kao i podacima u strukturi. Može se izvršiti inicijalizacija promenljive tipa unije. Inicijjalizacija se može izvršiti dodeljivanjem druge unije istog tipa ili samo inicijalizacijom prvog podatka u uniji. Na primer, za prethodno definisanu uniju možemo pisati: union prva pomA; pomA.i = 34; ili union prva pomB = pomA; Podacima pristupamo kao i kod struktura. Na primer: union prva pod; pod.i=23; x= pod.d; I ovde se može koristiti operator ako se koriste pokazivači. Ne može se koristiti sekveca: pod.i =2; x= 22.3*pod.f;
2.4. Polje bitova (niz bitova) U C-u ne postoji mogućnost rada sa bitovima direktno. Rad sa bitovima može se relizovat posredno, preko struktura. Tako možemo pisati: struct ime_strukture { [unsigned int <ime polja>] : <duzina_polja>; [unsigned int <ime polja>] : <duzina_polja>; ………. } Preko duzine_polja određujemo koliko će bitova biti rezervisano za svaki podatak u strukturi.
Dakle, ima smisla pisati: struct mem_linija { unsigned int poo: 1; unsigned int datum: 4: unsigned int ind: 1; unsigned int sadrzaj: 2; } registar; Pristup ovim podacima vrši sena uobičajen način, tj. kao i drugim elementima strukture: registar.ind=1; x= registra.poo;
2.5. typedef-specifikator Specifikator typedef služi za predefinisanje tipova podataka. Upotrebljava se u obliku (već je opisan ranije): typedef <stari_tip> <novi_tip> Na primer, možemo pisati: typedef int ceo; a potom vršiti deklaraciju na sledeći način: ceo pera, i , sat; typedef je koristan kod rada sa strukturama i unijama. Tako možemo pisati: typedef struct { float x; float y; } tacka; Zatim možemo deklarisati promenljive na sledeći način: tacka t1,t2, *pt;