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

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

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.

Podobné prezentace


Prezentace na téma: "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."— Transkript prezentace:

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 je homogenní datový typ Jedna proměnná v poli se nazývá prvek (po-ložka, složka) pole Každý prvek je explicitně označitelný a pří-mo přístupný 18/07/2018

2 Typ pole (2) Zpřístupnění jednoho prvku se provádí jmé-nem proměnné (typu pole) a indexem (inde-xy) určujícím konkrétní prvek v poli V jazyce C pole obsazuje spojitou oblast ope-rační paměti tak, že: první prvek je uložen na nejnižší přidělené adrese každý další prvek je uložen na adrese vyšší poslední prvek je uložen na nejvyšší adrese Pole mohou být: jednorozměrná vícerozměrná (dvourozměrné pole – matice) 18/07/2018

3 Jednorozměrné pole (1) Definice proměnné typu pole: datový_typ idPole[velikost]; datový_typ: specifikuje datový typ jednotlivých prvků pole idPole: identifikátor proměnné typu pole velikost: určuje počet prvků v poli jednotlivé prvky jsou zpřístupnitelné pomocí indexů v rozmezí 0 až velikost–1 poznámka: indexy prvků pole začínají vždy od nuly 18/07/2018

4 Jednorozměrné pole (2) Příklad: int hodnoty[10]; definuje proměnnou hodnoty (typu pole) obsahující 10 prvků typu int, které jsou zpřístupnitelné pomocí indexů v rozmezí 0 až 9 indexy prvků noty [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] hodnoty: 8 5 10 47 -1 32 -8 9 75 18/07/2018

5 Jednorozměrné pole (3) Zpřístupnění jednoho prvku v poli: idPole[výraz] idPole: identifikátor proměnné typu pole výraz: výraz, jehož vyhodnocením je dán index prvku v poli (tzv. indexový výraz) Příklad: hodnoty[5] zpřístupní prvek s indexem 5 (tj. 6. prvek) v poli hodnoty (prvek s hodnotou –1) 18/07/2018

6 Jednorozměrné pole (4) Hodnotu prvku v poli je možné použít stej-ným způsobem jako proměnnou nebo kons-tantu odpovídajícího datového typu Pozor: hodnoty indexů (indexových výrazů) určujících prvek pole by neměly nikdy nabýt hodnoty mi-mo definicí určené meze pokus o práci s hodnotami mimo meze pole (např. hodnoty[10]=100) není jazykem C kontrolován a vede obvykle k havárii programu 18/07/2018

7 Jednorozměrné pole (5) Definice proměnné typu pole může být spo-jena i s inicializací jednotlivých jeho prvků: datový_typ idPole[velikost]= {h0, h1, …, hvelikost–1}; h0, h1, …, hvelikost–1: hodnoty (popř. konstantní výrazy), které jsou typově kompatibilní s typem prvků pole (tj. s datovým typem datový_typ) tyto hodnoty (výsledky konstantních výrazů) se postupně (zleva doprava) přiřadí do jednotlivých prvků pole 18/07/2018

8 Jednorozměrné pole (6) Příklad: int drMoc[5]={0, 1, 4, 9, 16}; definuje proměnnou drMoc s následujícími iniciálními hodnotami: [0] [1] [2] [3] [4] drMoc: 1 4 9 16 Výčet hodnot v inicializaci prvků pole nemu-sí být úplný Zbývající prvky se nastaví na hodnotu 0 18/07/2018

9 Jednorozměrné pole (7) Příklad: int pole[5]={7, [3]=2}; definuje proměnnou pole s následujícími iniciálními hodnotami: [0] [1] [2] [3] [4] pole: 7 2 Je-li při definici pole uvedena i inicializace, pak může být vynechán výraz udávající jeho velikost 18/07/2018

10 Jednorozměrné pole (8) Počet prvků pole je dán počtem hodnot ve složených závorkách Příklad: int moc2[]={1, 2, 4, 8, 16, 32}; definuje proměnnou moc2 se šesti prvky a s následujícími iniciálními hodnotami: [0] [1] [2] [3] [4] [5] moc2: 1 2 4 8 16 32 18/07/2018

11 Jednorozměrné pole (9) Jazyk C neposkytuje operátor pro přiřazení pole jako celku Kopie pole se musí provádět samostatným ko-pírováním jednotlivých prvků (v rámci cyklu) nebo kopií bloku paměti Při načítání (zobrazování) prvků pole pomocí funkcí scanf (printf) je rovněž nutné po-stupovat po jednotlivých prvcích 18/07/2018

12 Ukazatele a pole (1) Mezi ukazateli a poli je v jazyce C velmi těsný vztah Operace, které lze provádět pomocí indexů polí, lze také provádět pomocí ukazatelů Verze s ukazateli bývá obecně rychlejší, ale může být hůře pochopitelná Nechť: int a[10], x; definuje pole a o 10 prvcích typu int a pro-měnnou x také typu int 18/07/2018

13 Ukazatele a pole (2) Zápis a[i] odkazuje na prvek s indexem i
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] a: Zápis a[i] odkazuje na prvek s indexem i Nechť je dán ukazatel ptrInt definovaný jako: int *ptrInt; Pak přiřazení ptrInt = &a[0] nastaví uka-zatel ptrInt tak, že bude ukazovat na prvek pole a s indexem 0 18/07/2018

14 Ukazatele a pole (3) Ukazatel ptrInt obsahuje adresu prvku a[0]
[1] [2] [3] [4] [5] [6] [7] [8] [9] a: ptrInt: Ukazatel ptrInt obsahuje adresu prvku a[0] Přiřazení: x = *ptrInt; zkopíruje obsah a[0] do proměnné x 18/07/2018

15 Ukazatele a pole (4) Ukazuje-li ukazatel ptrInt na konkrétní prvek pole, pak: ptrInt+i ukazuje na i-tý následující prvek ptrInt–i ukazuje na i-tý předcházející prvek Jestliže ukazuje ptrInt na prvek a[0], po-tom: *(ptrInt+1) odkazuje na obsah proměnné a[1] *(ptrInt+i) odkazuje na obsah proměnné a[i] 18/07/2018

16 Ukazatele a pole (5) [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] a:
ptrInt: ptrInt+1: ptrInt+2: ptrInt+9: 18/07/2018

17 Ukazatele a pole (6) Uvedené odkazy jsou platné nezávisle na veli-kosti proměnných v poli a V aritmetice ukazatelů platí, že: ptrInt+1 ukazuje na následující objekt za objektem ptrInt ptrInt+i ukazuje na i-tý objekt za objektem ptrInt V jazyce C je jméno pole synonymem pro umístění jeho počátečního prvku 18/07/2018

18 Ukazatele a pole (7) Z toho vyplývá, že přiřazení: ptrInt = &a[0]; je ekvivalentní přiřazení ptrInt = a; Odkaz na prvek a[i] lze také zapsat jako *(a+i) Výraz a+i je adresou i-tého prvku za a a je totožný s výrazem &a[i] Jestliže ptrInt je ukazatel, pak je možné jej indexovat, tj. ptrInt[i] je ekvivalentní *(ptrInt+i) 18/07/2018

19 Ukazatele a pole (8) Pozor: ukazatel je proměnná, tj. výrazy:
ptrInt = a ptrInt++ jsou správné jméno pole nepředstavuje proměnnou, tj. výrazy: a = ptrInt a++ jsou chybné 18/07/2018


Stáhnout ppt "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."

Podobné prezentace


Reklamy Google