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

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

Oblast platnosti identifikátoru (1)

Podobné prezentace


Prezentace na téma: "Oblast platnosti identifikátoru (1)"— Transkript prezentace:

1 Oblast platnosti identifikátoru (1)
Oblast (rozsah) platnosti identifikátoru je část programu, v níž je daný identifikátor viditel-ný (dostupný)  lze jej použít Identifikátorem rozumíme např. identifikátor proměnné, funkce nebo typu Definice identifikátorů (např. proměnných) lze rozdělit na: globální definice lokální definice 16/07/2018

2 Oblast platnosti identifikátoru (2)
Globální definice (proměnných): definuje proměnné, jejichž oblast platnosti je od místa definice až do konce souboru vyskytují se vně definic funkcí Lokální definice (proměnných): definuje proměnné, jejichž oblast platnosti je od místa definice až do konce funkce, v níž jsou definovány vyskytují se uvnitř definic funkcí 16/07/2018

3 Oblast platnosti identifikátoru (3)
Proměnné definované uvnitř bloku: jazyk C rovněž povoluje, aby proměnné byly de-finovány uvnitř složeného příkazu (bloku) oblast platnosti těchto proměnných je od místa definice až do konce složeného příkazu Proměnné definované v cyklu for: u příkazu cyklu for je možné v části inicializace definovat řídící proměnnou cyklu oblast platnosti této proměnné je omezena na právě prováděný cyklus 16/07/2018

4 Oblast platnosti identifikátoru (4)
Poznámka: identifikátory označující formální parametry funkce mají oblast platnosti pouze uvnitř pro-váděné funkce (podobně jako lokální proměnné) identifikátory definované direktivou #define jsou platné až do konce souboru nebo do odstra-nění definice pomocí direktivy #undef příklad: #define N 100 #undef N 16/07/2018

5 Oblast platnosti identifikátoru (5)
Jazyk C umožňuje, aby některé identifikátory byly překryty (zastíněny): identifikátor definovaný na vyšší úrovni (např. globální proměnná) může být překrytý identifiká-torem, který je stejně pojmenován a je definován na nižší úrovni (např. lokální proměnná) Poznámka: identifikátory: reprezentující formální parametry definované pomocí direktivy #define nemohou být překryty 16/07/2018

6 Funkce bez parametru Globálních proměnných je možné využít pro komunikaci funkce se svým okolím namísto komunikace pomocí formálních a skutečných parametrů Jsou-li uvnitř funkce globální proměnné mě-něny nežádoucím způsobem, může dojít k tzv. vedlejšímu efektu (side effect) Proto se pro zajištění vazby funkcí na své okolí preferuje užití formálních a skutečných parametrů 16/07/2018

7 Ukazatele na funkce (1) Jazyk C dovoluje definovat proměnnou jako ukazatel na funkci vracející hodnotu určitého datového typu Tato proměnná může následně obsahovat ad-resu, kde se v operační paměti nachází pře-dem definovaná funkce Definice proměnné, jež reprezentuje ukazatel na funkci se provádí: datový_typ (*ptrFun) (typy formálních parametrů); 16/07/2018

8 Ukazatele na funkce (2) datový_typ: ptrFun: typy formálních parametrů:
typ hodnoty, kterou funkce (na níž bude ukazovat pro-měnná ptrFun) vrací ptrFun: identifikátor proměnné typu ukazatel na funkci musí být zapsán v kulatých závorkách typy formálních parametrů: seznam (pouze) datových typů specifikuje, jaké jsou typy formálních parametrů funk-ce, na níž bude proměnná ptrFun ukazovat jednotlivé typy se oddělují symbolem čárka 16/07/2018

9 Ukazatele na funkce (3) Příklad: double (*ptrFun) (int, int); definuje proměnnou ptrFun, která může obsahovat ukazatel na libovolnou funkci, jež má dva formální parametry typu int a vrací hodnotu typu double Nechť je dána např. funkce: double prumer(int x, int y) { return (x+y)/2.0; } 16/07/2018

10 Ukazatele na funkce (4) Potom lze provést přiřazení: ptrFun = prumer;
Proměnná ptrFun nyní obsahuje ukazatel (adresu), kde se v operační paměti nachází funkce prumer Proměnnou ptrFun lze nyní použít pro vy-volání funkce prumer Příklad: double z; z = ptrFun(2,3); 16/07/2018

11 Ukazatele na funkce (5) Ukazatelů na funkce lze využít pro předání funkce jako parametru jiné funkci Příklad: double vypocet(int x, int y, double (*pF) (int, int)) { return pF(x,y); } z = vypocet(2,3,prumer); 16/07/2018

12 Ukazatele na funkce (6) Funkce qsort: deklarována v: stdlib.h
prototyp: void qsort(void *base, size_t num, size_t size, int (*compar) (const void *, const void *)); funkce: seřadí num prvků pole, na jehož začátek ukazuje ukaza-tel base každý prvek řazeného pole zabírá v operační paměti size bytů 16/07/2018

13 Ukazatele na funkce (7) vrácená hodnota:
pořadí prvků je určováno funkcí compar, která je opakovaně volána, aby provedla porovnání dvou prvků funkce compar musí: mít následující hlavičku: int compar(const void *p1, const void *p2); vracet hodnotu: <0 jestliže prvek odkazovaný pomocí p1 předchází prvek odkazovaný pomocí p2 0 jestliže prvek odkazovaný pomocí p1 je roven prvku odkazovanému pomocí p2 >0 jestliže prvek odkazovaný pomocí p1 následuje prvek odkazovaný pomocí p2 jako řadící algoritmu se používá metoda Quick sort vrácená hodnota: funkce nevrací žádnou hodnotu 16/07/2018

14 Ukazatele na funkce (8) Funkce bsearch: deklarována v: stdlib.h
prototyp: void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar) (const void *, const void *)); funkce: hledá zadaný klíč (na nějž ukazuje ukazatel key) v poli, na jehož začátek ukazuje ukazatel base prohledávané pole obsahuje num prvků a každý prvek pole zabírá v operační paměti size bytů 16/07/2018

15 Ukazatele na funkce (9) Poznámka: vrácená hodnota:
porovnávání prvků je prováděno funkcí compar, pro kterou platí stejná pravidla jako u funkce qsort jako vyhledávací metoda je použito binární vyhledávání  prvky v zadaném poli musí být nejprve seřazeny vrácená hodnota: jestliže je prvek nalezen, pak funkce vrací ukazatel na nalezený prvek v opačném případě funkce vrací hodnotu NULL Poznámka: datový typ size_t je chápán jako celočíselný typ bez znaménka 16/07/2018

16 Makra (1) Pro realizaci jednodušších výpočtů lze místo funkcí využít i tzv. makra Makra je možné definovat pomocí direktivy preprocesoru #define Příklad: #define PRUMER(A,B) (((A)+(B))/2) Dříve definované makro lze následně použít x=PRUMER(3+5,2*8); 16/07/2018

17 Makra (2) Makra jsou zpracovávána preprocesorem na úrovni zdrojového kódu Preprocesor provede odpovídající náhradu makra jeho definicí: Např.: x=(((3+5)+(2*8))/2)); 16/07/2018

18 M2160 Úvod do programování II (1)
Rekurze Řetězce Datový typ struktura Pojmenované datové typy Datový typ union Práce se soubory: textové soubory binární soubory Dynamické proměnné 16/07/2018

19 M2160 Úvod do programování II (2)
Dynamické datové struktury: zásobník fronta binární vyhledávací strom Předávání parametrů z příkazové řádky OS Složitost algoritmů Úvod do objektově orientovaného programo-vání – jazyk C# Tvorba aplikací s grafickým uživatelským rozhraním (GUI) 16/07/2018


Stáhnout ppt "Oblast platnosti identifikátoru (1)"

Podobné prezentace


Reklamy Google