6 elads 2005 prilis 5 Struktrk nik j

  • Slides: 20
Download presentation
6. előadás (2005. április 5. ) • • Struktúrák Úniók Új adattípus definíálása Dinamikus

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

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;

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

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

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 =

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:

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;

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

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; };

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

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ó.

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ű

Ú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{

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

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,

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

Ú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

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,

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

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