Ukazatele jsou výkonné funkce programování v C a C ++. Než se naučíme ukazatele, pojďme se dozvědět více o adresách v programování C.
Adresa v C
Pokud máte ve svém programu proměnnou var, &var
vám dá jeho adresu do paměti.
Adresu jsme použili mnohokrát při používání funkce scanf()
.
Zde je hodnota zadaná uživatelem uložena na adresu proměnné var. Pojďme si vzít funkční příklad.
Výstup
var: 5 address of var: 2686778
Poznámka: Při spuštění výše uvedeného kódu pravděpodobně dostanete jinou adresu.
C Ukazatele
Ukazatele (proměnné ukazatele) jsou speciální proměnné, které se používají k ukládání adres, nikoli hodnot.
Syntaxe ukazatele
Takto můžeme deklarovat ukazatele.
Zde jsme deklarovali ukazatel p typu int
.
Vy může také deklarovat ukazatele tímto způsobem.
Pojďme si vzít další příklad deklarace ukazatelů.
Zde jsme deklarovali ukazatel p1 a normální proměnnou p2.
Přiřazení adres ukazatelům
Pojďme si vzít příklad.
Zde je 5 přiřazeno proměnné c. A adresa c je přiřazena ukazateli počítače.
Získat hodnotu věci, kterou ukazují ukazatele
Chcete-li získat hodnotu věci, na kterou ukazatele ukazují, použijeme *
operátor. Například:
Zde je počítači přiřazena adresa c
. K získání hodnoty uložené na této adrese jsme použili * pc.
Poznámka: Ve výše uvedeném příkladu je pc ukazatel, nikoli *pc
. Nemůžete a neměli byste dělat něco jako *pc = &c
;
Mimochodem, *
se nazývá operátor dereference ( při práci s ukazateli). Funguje na ukazateli a udává hodnotu uloženou v tomto ukazateli.
Změna hodnoty ukazované ukazateli
Pojďme si vzít příklad.
Přiřadili jsme adresu c k ukazateli na pc.
Poté jsme změnili hodnotu c na 1. Protože pc a adresa c je stejné, *pc
nám dává 1.
Pojďme si vzít další příklad.
Přiřadili jsme adresu c ukazateli na PC.
Poté jsme *pc
změnili na 1 pomocí *pc = 1;
. Protože pc a adresa c jsou stejné, bude c rovno 1.
Pojďme si vzít ještě jeden příklad.
Zpočátku adresa c je přiřazena ukazateli počítače pomocí pc = &c;
. Protože c je 5, *pc
nám dává 5.
Poté je adresa d přiřazena ukazateli počítače pomocí pc = &d;
. Protože d je -15, *pc
nám dává -15 .
Příklad: Práce s ukazateli
Pojďme si vzít funkční příklad.
Výstup
Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2
Vysvětlení programu
-
int* pc, c;
zde , je vytvořen ukazatel pc a normální proměnná c, oba typuint
.
Protože pc a c nejsou původně inicializovány, ukazuje ukazatel pc buď na žádnou adresu, nebo náhodná adresa. Proměnná c má adresu, ale obsahuje náhodnou hodnotu smetí. -
c = 22;
Tím se přiřadí 22 proměnné c. To znamená, že 22 je uloženo v paměti proměnné c. -
pc = &c;
Tím se přiřadí adresa proměnné c ukazatelovému počítači. -
c = 11;
Tím se přiřadí 11 proměnné c. -
*pc = 2;
Tato změna hodnoty v místě paměti, na které ukazuje počítač ukazatele, na 2.
Časté chyby při práci s ukazateli
Předpokládejme, že chcete, aby počítač ukazatele přejděte na adresu c. Pak,
Zde je příklad začátečníků s syntaxí ukazatelů často matoucí.
Proč se nám nezobrazila chyba, když pomocí int *p = &c;
?
Je to proto, že
je ekvivalentní
V obou případech vytváříme ukazatel p
(ne *p
) a přiřazení &c
k tomu.
Abychom se vyhnuli této nejasnosti, můžeme použít následující příkaz:
Nyní víte, co jsou ukazatele, dozvíte se, jak ukazatele souvisejí s poli v dalším výukovém programu.