6 elads 2005 prilis 5 Struktrk nik j
- Slides: 20
6. előadás (2005. április 5. ) • • Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1
Struktúrák 1. Összetett adattípusok: – tömb, – struktúra, – unió. Struktúra deklarációja: struct struktnev {típus 1 név 1; típus 2 név 2; . . . }; struct struktnev változónév; 2
Struktúrák 2. Pl. struct szgep{char gyarto[50]; enum {intel, mips, motorola} proci; long memoria, disk; enum {cga, vga, svga, egyeb} monit; }; Inicializálás: struct szgep sajat = {"Xcomp", intel, 64 L, 2000 L, svga}; 3
Struktúrák 3. Memóriabeli tárolása szóhatárra igazított: sizeof (struct struktnev) >= sizeof (típus 1)+sizeof (típus 2)+. . . + sizeof (típusn) 4
Struktúrák 4. Hivatkozás a struktúra mezőire: . pont operátor struct strukttip valtazon; valtazon. mezonev Pl. printf("n%s%d%ld%ld%d", sajat. gyarto, sajat. proci, . . . ); 5
Struktúrák 5. Struktúra pointer Deklarációja: struct szgep{. . . } szerver, *p_str; p_str = &szerver; Hivatkozás a mezőkre: p_str -> gyarto p_str -> proci /* char* */ /* enum */ 6
Struktúrák 6. Struktúra tömb Deklarációja: struct szgep{. . . } gep[10]; Hivatkozás a mezőkre: gep[0]. gyarto /* char* */ 7
Struktúrák 7. Struktúra pointer tömb Deklarációja: struct szgep{. . . } gep[10], *p_str[6], sajat; Hivatkozás: p_str[0]=&sajat; p_str[1]=&gep[5]; p_str[0] -> proci p_str[1] -> gyarto 8
Struktúrák 8. Beágyazott struktúrák A struktúra mezőtípusa tetszőleges típus lehet. Pl. struct halozat{struct szgep csomopont; enum{tcpip, ipx, decnet} protokoll; int felhasznszam; }egyetem[100]; Hivatkozás: egyetem[2]. protokoll egyetem[1]. csomopont. proci 9
Struktúrák 9. Önhivatkozó struktúrák struct elem {char nev[50]; . . struct elem *kovetkezo; }; Példa később: láncolt lista. 10
Struktúrák 10. Kölcsönösen egymásra hivatkozó struktúrák struct s 1 {int a, struct s 2 *p; }; struct s 2 {int a, struct s 1 *p; }; 11
Struktúrák 11. A struktúra mint függvény paraméter érték (verem!) és cím szerint is átadható. Függvény visszatérő értéke is lehet struktúra. 12
Úniók Lehetővé teszi ugyanannak a memóriaterületnek több, különböző hivatkozással való elérését (buffer, változó szerkezetű struktúra). Deklarációja: union megoszt{int i; long l; float f; double d} uvalt; Hivatkozás: uvalt. i uvalt. l /* integer */ /* long */ Az únió mérete: max(sizeof(int), sizeof(long), sizeof(float), sizeof(double)) 13
Különféle byte-folyam feldolgozás struct adatok {int a, b, c; double d; }; union buf{ char buffer [sizeof(struct adatok)]; struct adatok bin; }; double get_buffer () { union buf b; int i; for(i=0; i<sizeof(struct adatok); i++) b. buffer[i]=getbyte(); return b. bin. d; } 14
Változó szerkezetű struktúra 1. struct hallg{int evf, tankor; . . . }; struct okt{int tanszek, beosztas, vegzettseg, . . . }; struct polgar{ enum{oktato, hallgato}tipus; union{ struct hallg uh; struct okt ut; }ember; }egyetemi; 15
Változó szerkezetű struktúra 2. switch (egyetemi. tipus) {case oktato: printf("n%d%d%d", egyetemi. ember. ut. tanszek, egyetemi. ember. ut. beosztas, egyetemi. ember. ut. vegzettseg); break; case hallgato: printf("n%d%d", egyetemi. ember. uh. evf, egyetemi. ember. uh. tankor); } 16
Új adattípus definíálása Egyszerűbb írásmód, karbantartás, logikai adatfüggetlenség. typedef típusnév; /*ez nem deklaráció*/ typedef struct fegyver {char name[50]; int tarmeret, float kaliber; } tfegyver; /*ez egy adattipus*/ tfegyver pisztoly={"Uzi", 30, 7. 0}; tfegyver agyuk[60]; . . . agyuk[50]. kaliber=100; 17
Define vagy typedef (csapda!) #define CPOINTER char* CPOINTER a, b; --> char*a, b; typedef char* CPOINTER; CPOINTER a, b; --> char *a, *b; 18
Dinamikus memória kezelés Header: <stdlib. h> void *malloc(size_t meret) /*nem inicializál*/ void *calloc(size_t nobj, size_t meret) /*inicializál 0 byte-ra*/ Újrafoglalás: void *realloc(void* ptr, size_t meret) Visszatérő érték: a memória kezdő címe, vagy NULL Felszabadítás: void free(void*) 19
Dinamikus tömb allokálás struct elem *p; p=(struct elem *) malloc(elemszam*sizeof(struct elem)); if (p==(struct elem *) NULL) { perror("allokálási hiba"); exit(. . . ); }. . . p[i]. mezo 1=. . . 20
- Elads crm
- Public candy companies
- Elads
- Nik eusa
- Organy kontroli legalności
- Nik kutnaks
- [email protected].
- Users.nik.uni-obuda/kovacs.andras
- Permenkes nomor 168 tahun 2005 mengatur tentang
- The regulatory reform (fire safety) order 2005 summary
- Visual studio 2005 team suite
- Gizem memiç türkiye güzeli
- One revolution is the same as: phy101
- Sql server 2005 sp
- Sql 2005 activity monitor
- Ogle-2005-blg-390
- National curriculum framework
- 2005
- Umn apas report
- Meci 2005
- Random number generator