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

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

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

Podobné prezentace


Prezentace na téma: "A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze 2009.01."— Transkript prezentace:

1 A1PRG - Programování – Seminář Ing. Michal Heczkoheczko@fai.utb.cz Typová konverze, oblast platnosti, paměťové třídy 9 Verze 2009.01

2 Agenda  Typová konverze  Oblast platnosti  Paměťové třídy

3 Typová konverze  Řeší situaci, kdy s určitou proměnnou potřebujeme pracovat jako s proměnnou jiného datového typu.  Typová konverze je pouze dočasná – tj. je platná pouze pro daný výraz.  2 druhy typové konverze:  Implicitní  Explicitní

4 Implicitní typová konverze  Probíhá automaticky (bez zásahu programátora).  Datový typ s nižší prioritou je automaticky konvertován na datový typ s vyšší prioritou.  Př. int x = 5; int y = 2; float z = x + y;

5 Implicitní typová konverze  Priorita datových typů: int unsigned int long unsigned long double long double

6 Explicitní typová konverze  Označována termínem „přetypování“.  Požadovaný datový typ se uvede do závorky před identifikátor proměnné.  Př. int x = 5; int y = 2; float z = x / (float)y;

7 Přetypování  Přetypování je nutné důkladně uvážit – může totiž ovlivnit správnost výsledku.  Příklad: float x = 2.816; int y = 3; int z; z = (int)(x * y); z = (int)x * y;

8 Oblast platnosti  Oblast zdrojového kódu, ve které je daná proměnná viditelná.  Oblasti platnosti proměnných:  Lokální proměnná  Globální proměnná

9 Oblast platnosti  Lokální proměnná:  Je definována uvnitř programového bloku (většinou funkce).  Je možné k ní přistupovat pouze v rámci bloku, ve kterém byla definována.  Není inicializována na výchozí hodnotu (obsahuje náhodné číslo) – nutno ji inicializovat

10 Oblast platnosti  Globální proměnná:  Je definována mimo jakoukoliv funkci.  Je platná od místa definice až do konce zdrojového souboru.  Je inicializována na výchozí nulovou hodnotu

11 Oblast platnosti - příklad

12

13

14

15

16 Paměťové třídy  Kromě identifikátoru a datového typu jsou proměnné určeny ještě paměťovou třídou, které náleží.  Paměťová třída určuje, kde bude proměnná v paměti uložena, jakou bude mít viditelnost a jakou životnost.

17 Paměťové třídy  Modifikátory:  auto  extern  static  register  volatile  const

18 Modifikátor auto  Implicitně používán pro všechny lokální proměnné, jejichž paměťová třída nebyla určena jiným modifikátorem.  Slouží pro vytváření automatických proměnných – paměť se pro ně alokuje až při vstupu do bloku, kde jsou definovány.  Po opuštění bloku je tato paměť opět uvolněna.

19 Modifikátor auto  V případě návratu do stejného bloku paměť znovu alokována.  Neexistuje záruka, že bude alokována na stejném místě!  Neexistuje záruka, že v této paměti bude stejná hodnota, jako na konci předešlého průchodu blokem.  Nejsou implicitně inicializovány nulovou hodnotou.

20 Modifikátor auto  Není nutné inicializovat konstantou, možno inicializovat i proměnnou nebo návratovou hodnotou funkce:  Př.: auto int x = 5; auto float y = (float)x; auto long z = pow(3,x);

21 Modifikátor auto  Proměnná s modifikátorem auto platí pouze v bloku, kde byla definována.  Existuje-li i globální proměnná se stejným názvem, bude použita proměnná s modifikátorem auto

22 Modifikátor auto - příklad #include int hodnota = 10; int vypocet() { auto int hodnota; hodnota = 15; printf(″%d″,hodnota); return 0; } int main() { vypocet(); printf(″%d″,hodnota); return 0; }

23 Modifikátor extern  Použití při odděleném překladu souborů  Říká překladači, že daná proměnná je definována v jiném souboru – zpřístupní se pro daný soubor  Namísto definice je tedy použita deklarace proměnné

24 Modifikátor extern - příklad soubor s1.c: … int hodnota; … Soubor s2.c: … extern int hodnota; …

25 Modifikátor static  Slouží pro vytváření statických proměnných.  Viditelnost shodná s automatickou proměnnou (tj. pouze v bloku, kde je definována – mimo tento blok není viditelná, ale na dané paměťové pozici zůstává).  Platnost po celou dobu vykonávání programu (tj. při opakovaném průchodu bloku si pamatuje hodnotu).

26 Modifikátor static #include int funkce() { static int i=0; i = i+2; return i; } int main() { int j; for (j=0; j<10; j++) printf("%d ", funkce()); return 0; }

27 Modifikátor register  Modifikátor, který ovlivňuje optimalizaci kódu programu.  Možnost uložit proměnnou přímo do registru procesoru.  Použití klíčového slova register pouze doporučuje umístění do registrů procesoru, záleží na překladači a jejich obsazenosti.

28 Modifikátor register  Modifikátor, který ovlivňuje optimalizaci kódu programu.  Možnost uložit proměnnou přímo do registru procesoru.  Použití klíčového slova register pouze doporučuje umístění do registrů procesoru, záleží na překladači a jejich obsazenosti.

29 Modifikátor register  Možno vytvářet pouze pro lokální proměnné  Životnost a viditelnost stejná jako u automatické proměnné.  Nemožnost používat operátor reference.

30 Modifikátor register - příklad #include int main() { register int x = 5; x = x + 1; printf(″%d″,x); return 0; }

31 Modifikátor volatile  Ovlivňuje optimalizaci kódu.  Takto označená proměnná nebude optimalizována.  Používá se především v případech, kdy hodnota proměnné může být měněna nějakým asynchronním procesem z vnějšku programu, např. pomocí přerušení.

32 Modifikátor volatile - příklad volatile int i; i=0; while (i==0) ; //smyčku ukončí až vnější událost, která //změní hodnotu i

33 Modifikátor const  Vytváření konstantních proměnných  Konstantní proměnná:  Nelze ji měnit přiřazením.  Hodnotu lze přiřadit pouze inicializací při její definici.  Alternativa k symbolickým konstantám (zabírá však místo v paměti).  Lze měnit pouze pomocí ukazatelů.

34 Modifikátor const - příklad #include int main() { const int hodnota = 20; int *ukazatel = &hodnota; //chyba, nelze provést: hodnota=30; printf("%d\n", hodnota); // nepřímá změna hodnoty konst. Proměnné: *ukazatel = 40; printf("%d\n", hodnota); }

35 A1PRG-s 09. Typová konverze Děkuji za pozornost Ing. Michal Heczko heczko@fai.utb.cz 218/U3 Prezentace k dispozici na http://vyuka.fai.utb.czhttp://vyuka.fai.utb.cz


Stáhnout ppt "A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze 2009.01."

Podobné prezentace


Reklamy Google