Programování v jazyce C++

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Standardní knihovní funkce pro práci s textovými řetězci
Programování v C jazyku - SEMINÁŘ
Programování funkcí v Excelu (pole)
Programovací jazyk C++
Přednáška 11 Jiří Šebesta
Programování 2 Cvičení 5.
Semestrální práce KIV/PT Martin Kales Hana Hůlová.
Pole, ukazatele a odkazy
Strukturované datové typy
Algoritmy I. Cvičení č. 10.
Principy překladačů Běhová podpora Jakub Yaghob. Běhová podpora Statická podpora jazyka Překladač Interface na knihovny Hlavičkové soubory Dynamická podpora.
Materiály k přednášce Úvod do programování Ondřej Čepek.
C# - struktury, výčtové typy, pole
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
Dynamická alokace, polymorfismus
Seminář C cvičení Obsluha výjimek Ing. Jan Mikulka.
Algoritmy vyhledávání a řazení
Současný svět Projekt č. CZ /3. 1
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
JavaScript Podmínky, cykly a pole.
Cvičení.
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
10. Dynamické proměnné Dynamická proměnná se nezavádí deklarací proměnných, ale vzniká za běhu programu provedením speciálního příkazu. Nemá přidělen žádný.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Knihovna GLib ● Multiplatformní nástavba standardní C knihovny (běží na Windows, Linux, Mac,...) ● Naleznete zde nástroje pro komfortní práci s řetězci.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
Ukazatele BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Vnitřní (operační paměť)
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Vazby dynamických proměnných,databázové systémy Přednáška č. 10.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
PROGRAMOVÁNÍ 3ITA,3ITB Jaroslav Burdys Hlavní zdroj:
Programování v jazyce C++ Dědičnost a polymorfismus.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Programování v jazyce C++ Speciality jazyka C++, úvod do OOP.
Alokace paměti v C++ Funkce v C++ a parametry typu reference, implicitní parametry funkcí.
Typ struktura (1) Datový typ struktura (struct) je agrego-vaný heterogenní datový typ Jedná se o skupinu několika proměnných, které mohou mít různé datové.
Y36PJC Programování v jazyce C/C++
Programovací jazyk C# 4. část - cykly.
Programování ENUM, SWITCH,pole jednorozměrná a vícerozměrná, deklarace, inicializace, kopírování, porovnání Erik Král.
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Programovací jazyk C++
Y36PJC Programování v jazyce C/C++
Programování v jazyce C++
Programování v jazyce C++
Kurz algoritmizace a programování v jazyce C
Programování v jazyce C++
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
Abstraktní datové typy
Správa paměti.
Dynamické proměnné (1) Proměnné, jejichž počet a (nebo) velikost pa-měti využívané těmito proměnnými se v prů-běhu programu mění Dynamické proměnné lze.
Oblast platnosti identifikátoru (1)
Typ pole (1) Proměnná typu pole představuje kolekci proměnných stejného datového typu, které mohou být označovány společným jménem (identifikátorem) Pole.
Programování v jazyce C++
C# přehled vlastností.
Typ ukazatel (1) Proměnné typu ukazatel (pointer) uchovávají paměťovou adresu Hodnota ukazatele říká, kde (na jaké adrese) se v paměti nachází nějaký objekt.
Paměť.
Union neboli sjednocení Bitová pole
Funkce s proměnným počtem parametrů
Transkript prezentace:

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

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.

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.

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.

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().

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().

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.

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,

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))

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.

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]);

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++),

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.

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;

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.

Č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?

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

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.

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.

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

THE END Děkuji za pozornost

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 www.builder.cz.