Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilAdéla Šimková
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
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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.