Pointer je základní stavební kámen nízkoúrovňového programování. Umožňuje programátorovi přímo manipulovat s operační pamětí (RAM). Místo toho, aby se s daty pracovalo jako s kopiemi, pointer ukazuje přímo na místo, kde data fyzicky leží.
Představte si to jako rozdíl mezi tím, když někomu dáte kopii dokumentu (hodnota), nebo mu dáte klíč od skříňky, ve které je dokument uložen (pointer).
Každá proměnná v počítači má svou adresu (podobně jako číslo popisné u domu). Pointer tyto adresy ukládá.
Použití ukazatelů má několik kritických výhod:
Pokud máte v programu obrovský objekt (např. 3D model s miliony bodů), je velmi pomalé jej kopírovat při každém předání funkci. Místo toho předáte jen malý pointer (adresu), což je okamžité.
Pointery umožňují alokovat paměť až za běhu programu. Můžete tak vytvořit pole prvků, jehož velikost neznáte v době psaní kódu, ale zjistíte ji až podle potřeby uživatele.
Při psaní ovladačů (driverů) nebo operačních systémů musí programátor přistupovat k přesným adresám v paměti, které ovládají hardware (např. grafickou kartu).
Manuální správa paměti pomocí pointerů je častým zdrojem chyb:
V moderním C++ se často místo syrových pointerů používají reference nebo „chytré ukazatele“ (smart pointers).
| Vlastnost | Pointer | Reference |
|---|---|---|
| Může být prázdný? | Ano (NULL/nullptr). | Ne, musí být inicializována. |
| Změna cíle? | Ano, může ukázat na jinou adresu. | Ne, je to jen „přezdívka“ pro jednu věc. |
| Syntaxe | Složitější (vyžaduje * a →). | Jednoduchá (jako běžná proměnná). |
Související pojmy: C++, RAM, Kompilátor, Strojový kód, Dynamická alokace.