Ukazatele v programování C s příklady

Ukazatel je proměnná, která ukládá adresu jiné proměnné. Na rozdíl od jiných proměnných, které obsahují hodnoty určitého typu, ukazatel obsahuje adresu proměnné. Například celočíselná proměnná obsahuje (nebo můžete říci, že ukládá) celočíselnou hodnotu, ale celočíselný ukazatel obsahuje adresu celočíselné proměnné. V této příručce probereme ukazatele v programování C pomocí příkladů.

Než budeme diskutovat o ukazatelích v jazyce C, pojďme si vzít jednoduchý příklad, abychom pochopili, co rozumíme pod adresou proměnné.

Jednoduchý příklad, jak pochopit, jak přistupovat k adrese proměnné bez ukazatelů?

V tomto programu máme proměnnou num typu int. Hodnota num je 10 a tato hodnota musí být uložena někde v paměti, že? Pro každou proměnnou, která obsahuje hodnotu této proměnné, je přidělen paměťový prostor, tento paměťový prostor má adresu. Například žijeme v domě a náš dům má adresu, která pomáhá ostatním lidem najít náš dům. Stejným způsobem je hodnota proměnné uložena na adrese paměti, což pomáhá programu C najít tuto hodnotu, když je potřeba.

Řekněme tedy, že adresa přiřazená proměnné num je 0x7fff5694dc58, což znamená, že jakákoli hodnota, kterou bychom přiřadili num, by měla být uložena na místě: 0x7fff5694dc58. Viz následující diagram.

Výstup:

Value of variable num is: 10Address of variable num is: 0x7fff5694dc58

Jednoduchý příklad ukazatelů v C

Tento program ukazuje, jak je ukazatel deklarován a používán. Existuje několik dalších věcí, které můžeme s ukazateli dělat, diskutovali jsme o nich dále v této příručce. Prozatím potřebujeme vědět, jak propojit ukazatel s adresou proměnné.

Je třeba si uvědomit následující: Datový typ ukazatele a proměnná se musí shodovat, ukazatel int může obsahovat adresu proměnné int, podobně ukazatel ukazující s datovým typem float může obsahovat adresu proměnné float. V níže uvedeném příkladu jsou ukazatel i proměnná typu int.

Výstup:

Address of variable num is: 0x7fff5694dc58

C ukazatele – operátory, které se používají s ukazateli

Pojďme diskutovat o operátorech & a *, které se používají s ukazateli v C.

„Adresa“ (&) operátor

Již v prvním příkladu jsme viděli, že můžeme zobrazit adresu proměnné pomocí ampersandu sign. Použil jsem & num pro přístup na adresu proměnné num. Operátor & je také známý jako „adresa“ operátora.

printf("Address of var is: %p", &num);

Poznámka:% p je specifikátor formátu, který se používá pro zobrazení adresy v hexadecimálním formátu.
Nyní víte, jak se dostat adresu proměnné, ale jak ji uložit do jiné proměnné? To je místo, kde se ukazatele dostanou do obrazu. Jak již bylo zmíněno na začátku této příručky, ukazatele v programování C se používají k uchování adresy jiných proměnných.

Ukazatel je jako jiná proměnná, hlavní rozdíl spočívá v tom, že ukládá adresu jiné proměnné, nikoli hodnota.

„Hodnota na adrese“ (*) operátor

Operátor * je také známý jako hodnota na adrese operátor.

Jak deklarovat ukazatel ?

Výše je uvedeno několik příkladů deklarací ukazatelů. Pokud potřebujete ukazatel pro uložení adresy celočíselné proměnné, měl by být datový typ ukazatele int. Stejný případ je u ostatních datových typů.

Použitím operátoru * můžeme získat hodnotu proměnné pomocí ukazatele.
Například:

double a = 10;double *p;p = &a;

* p dalo by nám hodnotu proměnné a. Následující příkaz by zobrazil 10 jako výstup.

printf("%d", *p);

Podobně, když přiřadíme hodnotu * ukazateli takto:

*p = 200;

Změnilo by to hodnotu v ariable a. Výše uvedený příkaz změní hodnotu a z 10 na 200.

Příklad ukazatele ukazující použití & a *

výstupu :

Value of variable var is: 10Value of variable var is: 10Address of variable var is: 0x7fff5ed98c4cAddress of variable var is: 0x7fff5ed98c4cAddress of pointer p is: 0x7fff5ed98c50

Abychom tomu lépe porozuměli, vezmeme několik dalších příkladů –
Řekněme, že máme char proměnnou ch a ukazatel ptr, který obsahuje adresu ch.

char ch="a";char *ptr;

Přečtěte si hodnotu ch

printf("Value of ch: %c", ch);orprintf("Value of ch: %c", *ptr);

Změňte hodnotu ch

ch = "b";or*ptr = "b";

Výše uvedený kód nahradí hodnotu a s b .

Dokážete uhodnout výstup následujícího programu C?

Výstup:

Address of var is: 0x7fff5d027c58Address of var is: 0x7fff5d027c58Value of var is: 10Value of var is: 10Value of var is: 10Value of pointer p is: 0x7fff5d027c58Address of pointer p is: 0x7fff5d027c50

Další témata na ukazatelích

1) Ukazatel na ukazatel – Ukazatel může ukazovat na jiný ukazatel (což znamená, že může uložit adresu jiného ukazatele), tyto ukazatele se označují jako dvojitý ukazatel NEBO ukazatel na ukazatel.

2) Předávání ukazatelů do funkce – Ukazatele lze také předat jako argument funkci, pomocí této funkce lze funkci vyvolat odkazem a při volání lze funkci předat funkci.

3) Ukazatele funkcí – Ukazatel funkce je stejně jako jiný ukazatel, používá se k uložení adresy funkce. Ukazatel funkce lze také použít pro volání funkce v programu C.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *