Ukazatele v programování v C: Co je ukazatel, typy a příklady

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á

Co se naučíte: [ ukázat ]

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
  1. Deklarace ukazatele
  2. Vrátí hodnotu odkazované proměnné
&Slouží pouze 1 účelu
  • Vrátí adresu proměnné

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ýrazEkvivalentní 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í
Úkolint *P1, *P2 P1 = P2; P1 a P2 ukazují na stejnou celočíselnou proměnnou
Inkrementace a dekrementaceInt *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.