Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v jazyce C++

Podobné prezentace


Prezentace na téma: "Programování v jazyce C++"— Transkript prezentace:

1 Programování v jazyce C++
Správa paměti, speciality C

2 Opakování pointery, operátory * a &, jednorozměrná statická pole,
pointerová aritmetika, práce s řetězci, formátované čtení a zápis a do řetězce.

3 Přidělení paměti v C I. k přidělování paměti se používá funkce malloc(): vstupem je velikost požadované paměti (v bytech), výstupem je pointer na void (nutno přetypovat) odkazující na začátek přidělené paměti, nebo NULL (není místo), paměti může být přiděleno více – záležitost operačního systému, tato paměť se přiděluje z heapu, ne ze zásobníku.

4 Přidělení paměti v C II. příklad:
int *p = (int *) malloc(10*sizeof(int)); pro přidělení více položek lze použít funkci calloc: int *p = (int *) calloc(10, sizeof(int)); ta navíc pole vynuluje.

5 Uvolnění paměti v C k uvolnění paměti v C slouží funkce free(),
jejím parametrem je pointer na void, vhodné tedy vstup přetypovat, funkce nemění hodnotu parametru: je tedy vhodné jej nastavit na NULL, některé překladače vyžadují k uvolnění paměti přidělené pomocí calloc() použít funkci cfree().

6 Realokace paměti v C v případě, že přidělená paměť dojde, je nutno zažádat o větší blok, postupujeme takto: alokujeme větší pole, překopírujeme do něho původní, uvolníme původní, nastavíme ukazatel. můžeme též použít funkci realloc().

7 Vícerozměrná pole pole v C jsou statická nebo dynamická,
vícerozměrná pole jsou vlastně pole polí, dvourozměrná pole mohou být: statické pole statických polí, statické pole dynamických polí, dynamické pole statických polí, u vícerozměrných analogicky.

8 Statická pole statických polí
deklarace: int polea[10][5]; polea zabírá 10 * 5 * 4 byty, polea je uloženo jako 50 po sobě jdoucích prvků velikosti 4 byty, polea pointer pole intů, polea[0] je pointer na int, polea[0][0] je int,

9 Dynamická pole dynamických polí
deklarace: int **poleb; poleb je pointer na pointer na int, *poleb je pointer na int, **poleb je int, alokace: poleb = (int**) malloc(10 * sizeof(int*)), for (i=0; i<10; i++) *(poleb+i) = (int*) malloc(5 *sizeof(int))

10 Ostatní případy statická pole dynamických polí:
int *polec[10]; v paměti neleží za sebou, dynamická pole statických polí: int (*poled)[5]; v paměti leží za sebou, tyto možnosti jsou méně používány.

11 Srovnání podle typu pole: podle paměťové náročnosti: podle tvaru pole:
polea je statické, ostatní jsou dynamická, podle paměťové náročnosti: polea < polec <= poled < poleb podle tvaru pole: polea a poled tvoří pouze pravoúhlá pole, poleb a polec mohou být zubatá, podle použití jako formální parametry funkcí: u polea a poled je nutno zadat počet sloupců: int fce (int pole[][10]);

12 Přidělení paměti v C++ pro přidělení paměti se v C++ používá operátor new, příklad: a = new int; a = new int(55); při úspěchu vrací pointer na daný typ, při neúspěchu vrací NULL nebo vyvolá výjimku bad_alloc (v ISO C++),

13 Alokace pole v C++ jednorozměrné pole v C++ lze alokovat takto:
int *a = new int[n]; n nemusí být konstanta, alokace dvourozměrného pole: int (*a)[3] = new([n][3]); protože se jedná o pole polí, první index sice nemusí být konstanta, ale další položky již ano, je nutno znát, kolik paměti je třeba pro každou položku.

14 Uvolnění paměti v C++ k uvolnění dynamicky alokované paměti slouží operátor delete, má dvě formy, uvolnění jednoduché proměnné: delete a; uvolnění pole: delete [] a;

15 Pointery na funkce v C je možné definovat proměnnou typu pointer na funkci: int (*fce)(); mějme definováno: int mensi(int a, int b); pak můžeme přiřadit: fce = mensi; použití: např. u řazení můžeme měnit kritérium.

16 Čtení složitějších definic
mějme následující deklarace: int *a; int *a(); int (*a)(); int *a[]; int (*a)[]; int (*a[])(); jak jim máme rozumět?

17 Čtení složitějších definic
nalezneme identifikátor, od něho čteme doprava, ukončující samostatná závorka nás vrací na jí odpovídající levou, čteme stále vpravo, přečtené přeskakujeme, středník nás vrací na nejlevější dosud zpracované místo, od něho čteme doleva.

18 Funkce s proměnným počtem parametrů
funkce s proměnným počtem parametrů musí mít alespoň jeden parametr pevný, deklarace: int fce(int cnt, …); z pevných parametrů musí být zřejmý počet volných parametrů, volné parametry jsou na zásobníku uloženy bezprostředně za pevnými.

19 Funkce s proměnným počtem parametrů II.
je též možno využít makra a typy z hlavičkového souboru stdarg.h, jsou to: va_list – ukazatel na zásobník, va_start(p, i) – nastaví ukazatel p za proměnnou i, va_arg(p, int) – načte ze zásobníku hodnotu typu int do proměnné p, va_end(p) – ukončí práci s odkazem na zásobník p.

20 Bitová pole bitové pole je struktura,
její velikost je omezena velikostí int, minimální velikost jedné položky je 1 bit, položka je určena názvem a počtem bitů, deklarace: struct bpole { unsigned a:4; unsigned b:12; }

21 THE END Děkuji za pozornost

22 Použitá literatura Pavel Herout – Učebnice jazyka C,
Miroslav Virius – Od C k C++, Slajdy na předmět X36PJC z akademického roku 2008/2009 (Ladislav Vágner, Karel Müller), FEL ČVUT, Slajdy na předmět 36PJC z akademického roku 2004/2005 (Petr Matyáš), FEL ČVUT, Server


Stáhnout ppt "Programování v jazyce C++"

Podobné prezentace


Reklamy Google