- Podrobnosti
- Poslední aktualizace: 8. května 2021
Co je ukazatel v C?
The Ukazatel v C je proměnná, která ukládá adresu jiné proměnné. Ukazatel lze také použít k označení jiné funkce ukazatele. Ukazatel může být zvýšen/ snížen, tj. Aby ukazoval na další/ předchozí umístění paměti. Účelem ukazatele je ušetřit místo v paměti a dosáhnout rychlejší doby provádění.
Jak používat ukazatele v C
Pokud deklarujeme proměnnou v typu int, v ve skutečnosti uloží hodnotu.
v se nyní rovná nule.
Každá proměnná má však kromě hodnoty také svoji adresu (nebo zjednodušeně řečeno, kde se v paměti nachází). Adresu lze načíst vložením ampersandu (&) před název proměnné.
Pokud vytisknete adresu proměnné na obrazovce, bude vypadat jako zcela náhodné číslo (navíc se může lišit od běhu k běhu).
Zkusme to v praxi s ukazatelem v příkladu C.
Výstupem tohoto programu je -480613588.
Nyní, co je ukazatel? Namísto ukládání hodnoty ukazatel uloží adresu proměnné.
Proměnná ukazatele
Int *y = & v;
VARIABILNÍ | UKAZATEL |
NA hodnota uloženy v a pojmenovaný adresa úložiště/paměti | NA proměnná že ukazovat na adresa úložiště/paměti další proměnná |
- Jak používat ukazatele v C
- Ukazatele přímého a nepřímého přístupu
- Aritmetika ukazatele v C
- Ukazatele a pole C s příklady
- C Ukazatele a řetězce s příklady
- Výhody ukazatelů v C
- Nevýhody ukazatelů v C
Deklarace ukazatele
Stejně jako proměnné, ukazatele v programování C musí být deklarovány, než mohou být použity ve vašem programu. Ukazatele lze pojmenovat jakkoli chcete, pokud dodržují pravidla pojmenování C. Deklarace ukazatele má následující formu. | _+_ |
Tady,
- datový typ je základní typ ukazatelů typů proměnných C a udává typ proměnné, na kterou ukazatel ukazuje.
- Hvězdička (*: stejná hvězdička používaná pro násobení), která je operátorem směrování, deklaruje ukazatel.
Podívejme se na některé platné deklarace ukazatelů v tomto kurzu C ukazatelů: | _+_ |
Inicializujte ukazatel
Po deklaraci ukazatele jej inicializujeme jako standardní proměnné s adresou proměnné. Pokud ukazatele v programování C nejsou neinicializovány a použity v programu, výsledky jsou nepředvídatelné a potenciálně katastrofální.
K získání adresy proměnné používáme operátor ampersand (&) umístěný před názvem proměnné, jejíž adresu potřebujeme. Inicializace ukazatele se provádí pomocí následující syntaxe.
Syntaxe ukazatele
data_type * pointer_variable_name;
Jednoduchý program pro ilustraci ukazatele je uveden níže: | _+_ |
Výstup: | _+_ |
Operátor | Význam |
* | Slouží 2 účelu
|
& | Slouží pouze 1 účelu
|
Typy ukazatelů v C
Následující jsou různé Typy ukazatelů v C :
Nulový ukazatel
Můžeme vytvořit nulový ukazatel přiřazením nulové hodnoty během deklarace ukazatele. Tato metoda je užitečná, pokud k ukazateli nemáte přiřazenou žádnou adresu. Nulový ukazatel vždy obsahuje hodnotu 0.
Následující program ukazuje použití nulového ukazatele: | _+_ |
Výstup: | _+_ |
Prázdný ukazatel
V programování C se prázdný ukazatel také nazývá generický ukazatel. Nemá žádný standardní datový typ. Ukazatel prázdnoty se vytvoří pomocí klíčového slova void. Lze jej použít k uložení adresy libovolné proměnné.
Následující program ukazuje použití prázdného ukazatele: | _+_ |
Výstup: | _+_ |
Divoký ukazatel
Ukazatel je považován za divoký ukazatel, pokud není inicializován na nic. Tyto typy ukazatelů C nejsou efektivní, protože mohou ukazovat na nějaké neznámé místo v paměti, což může způsobit problémy v našem programu a může to vést ke zhroucení programu. Při práci s divokými ukazateli byste měli být vždy opatrní.
Následující program ukazuje použití divokého ukazatele: | _+_ |
Výstup | _+_ |
Další typy ukazatelů v 'c' jsou následující:
- Visící ukazatel
- Složitý ukazatel
- Blízko ukazatele
- Daleko ukazatel
- Obrovský ukazatel
Ukazatele přímého a nepřímého přístupu
V jazyce C existují dva ekvivalentní způsoby přístupu a manipulace s proměnným obsahem
- Přímý přístup: používáme přímo název proměnné
- Nepřímý přístup: používáme ukazatel na proměnnou
Pojďme to pochopit pomocí níže uvedeného programu | _+_ |
Po kompilaci programu bez chyb je výsledkem: | _+_ |
Aritmetika ukazatele v C
Operace ukazatele jsou shrnuty na následujícím obrázku
Operace ukazatele
Prioritní operace (priorita)
Při práci s ukazateli C musíme dodržovat následující pravidla priority:
- Operátory * a & mají stejnou prioritu jako unární operátory (negace !, přírůstek ++, dekrement--).
- Ve stejném výrazu jsou unární operátory *, &,!, ++, - vyhodnoceny zprava doleva.
Pokud ukazatel P ukazuje na proměnnou X, pak * P lze použít všude tam, kde lze zapsat X.
Následující výrazy jsou ekvivalentní:
int X = 10 int *P = & Y; Pro výše uvedený kód platí níže uvedené výrazy | |
Výraz | Ekvivalentní výraz |
Y = * P + 1 *P =*P+10 *P+= 2 ++*P (*P) ++ | Y = X + 1 X = X+10 X + = 2 ++ X X ++ |
V druhém případě jsou nutné závorky: protože unární operátory * a ++ jsou vyhodnocovány zprava doleva, bez závorek by se zvýšil ukazatel P, nikoli objekt, na který ukazuje P.
Níže uvedená tabulka ukazuje aritmetickou a základní operaci, kterou lze použít při práci s ukazateli C.
Úkon | Vysvětlení |
Úkol | int *P1, *P2 P1 = P2; P1 a P2 ukazují na stejnou celočíselnou proměnnou |
Inkrementace a dekrementace | Int *P1; P1 ++; P1--; |
Přidání ofsetu (konstantní) | To umožňuje ukazateli přesouvat N prvků v tabulce. Ukazatel se zvýší nebo sníží o N násobek počtu bajtů typu typu proměnné. P1+5; |
Ukazatele a pole C s příklady
K prvkům pole přistupujeme tradičně pomocí jeho indexu, ale tuto metodu lze eliminovat pomocí ukazatelů. Ukazatele usnadňují přístup ke každému prvku pole. | _+_ |
Výstup | _+_ |
Přidání konkrétního čísla na ukazatel přesune umístění ukazatele na hodnotu získanou operací sčítání. Předpokládejme, že p je ukazatel, který aktuálně ukazuje na paměťové místo 0, pokud provedeme následující operaci sčítání, p+1, pak se provede tímto způsobem:
Sčítání/přírůstek ukazatele
Protože p aktuálně ukazuje na místo 0 po přidání 1, hodnota se stane 1, a proto ukazatel bude ukazovat na umístění paměti 1.
C Ukazatele a řetězce s příklady
Řetězec je pole objektů char, které končí nulovým znakem ' 0'. S řetězci můžeme manipulovat pomocí ukazatelů. Tento ukazatel v příkladu C vysvětluje tuto část | _+_ |
Výstup | _+_ |
Další způsob řešení řetězců je s řadou ukazatelů, jako v následujícím programu: | _+_ |
Výstup: | _+_ |
Výhody ukazatelů v C
- Ukazatele jsou užitečné pro přístup k místům v paměti.
- Ukazatele poskytují účinný způsob přístupu k prvkům struktury pole.
- Ukazatele se používají pro dynamickou alokaci paměti i pro opětovné přidělování.
- Ukazatele se používají k vytváření složitých datových struktur, jako je propojený seznam, graf, strom atd.
Nevýhody ukazatelů v C
- Ukazatele jsou trochu složité na pochopení.
- Ukazatele mohou vést k různým chybám, jako jsou chyby segmentace nebo mohou přistupovat k umístění paměti, které není vůbec vyžadováno.
- Pokud je ukazateli poskytnuta nesprávná hodnota, může dojít k poškození paměti.
- Ukazatele jsou také zodpovědné za únik paměti.
- Ukazatele jsou poměrně pomalejší než ukazatele.
- Programátoři velmi obtížně pracují s ukazateli; proto je zodpovědností programátora opatrně manipulovat s ukazatelem.
souhrn
- Ukazatel není nic jiného než místo v paměti, kde jsou uložena data.
- K přístupu do umístění v paměti se používá ukazatel.
- Existují různé typy ukazatelů, jako je nulový ukazatel, divoký ukazatel, prázdný ukazatel a další typy ukazatelů.
- Ukazatele lze použít s polem a řetězcem k efektivnějšímu přístupu k prvkům.
- Můžeme vytvářet ukazatele funkcí pro dynamické vyvolání funkce.
- Aritmetické operace lze provádět na ukazateli, který je známý jako aritmetika ukazatele.
- Ukazatele mohou také ukazovat na funkce, což usnadňuje volání různých funkcí v případě definování řady ukazatelů.
- Chcete -li pracovat s různými proměnnými datového typu, můžete použít ukazatel na prázdný typ.