Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.

Hasonló előadás


Az előadások a következő témára: "6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1."— Előadás másolata:

1 6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1

2 Struktúrák 1. Összetett adattípusok: –tömb, –struktúra, –unió. Struktúra deklarációja: struct struktnev {típus1 név1; típus2 név2;...}; struct struktnev változónév; 2

3 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, 64L, 2000L, svga}; 3

4 Struktúrák 3. Memóriabeli tárolása szóhatárra igazított: sizeof (struct struktnev) >= sizeof (típus1)+sizeof (típus2) sizeof (típusn) 4

5 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

6 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/* char* */ p_str -> proci/* enum */ 6

7 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

8 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

9 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

10 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

11 Struktúrák 10. Kölcsönösen egymásra hivatkozó struktúrák struct s1 {int a, struct s2 *p; }; struct s2 {int a, struct s1 *p; }; 11

12 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

13 Ú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/* integer */ uvalt.l/* long */ Az únió mérete: max(sizeof(int), sizeof(long),sizeof(float),sizeof(double)) 13

14 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

15 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

16 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

17 Új adattípus definíálása Egyszerűbb írásmód, karbantartás, logikai adatfüggetlenség. typedef típus 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

18 Define vagy typedef (csapda!) #define CPOINTER char* CPOINTER a,b; --> char*a,b; typedef char* CPOINTER; CPOINTER a,b; --> char *a, *b; 18

19 Dinamikus memória kezelés Header: 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

20 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].mezo1=... 20


Letölteni ppt "6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1."

Hasonló előadás


Google Hirdetések