Mutatók a C programozásban példákkal

A mutató egy olyan változó, amely egy másik változó címét tárolja. Eltérően más változóktól, amelyek bizonyos típusú értékeket tárolnak, a mutató egy változó címét tartalmazza. Például egy egész változó egy egész értéket tartalmaz (vagy mondhatja el, hogy tárolja), egy egész mutató azonban egy egész változó címét. Ebben az útmutatóban a C programozásban szereplő mutatókat példák segítségével tárgyaljuk.

Mielőtt a C mutatóival foglalkoznánk, vegyünk egy egyszerű példát, hogy megértsük, mit értünk egy változó címén.

Egyszerű példa arra, hogy megértsük, hogyan lehet hozzáférni egy változó címéhez mutatók nélkül?

Ebben a programban van egy változó int típusú változó. A num értéke 10, és ezt az értéket valahol a memóriában kell tárolni, igaz? Minden változó számára memóriaterület van lefoglalva, amely a változó értékét tárolja, ennek a memóriaterületnek van címe. Például egy házban élünk, és a házunknak van címe, amely segít másoknak megtalálni a házunkat. Ugyanúgy tároljuk a változó értékét egy memória címben, ami segít a C programnak megtalálni azt az értéket, amikor arra szükség van.

Tehát tegyük fel, hogy a num változóhoz rendelt cím 0x7fff5694dc58, vagyis azt az értéket, amelyet a számhoz rendelnénk, a következő helyen kell tárolni: 0x7fff5694dc58. Lásd az alábbi ábrát.

Kimenet:

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

Egyszerű példa mutatókra a C

Ez a program megmutatja, hogyan kell deklarálni és használni a mutatót. Számos más dolgot is megtehetünk a mutatókkal, ezeket később megvitattuk ebben az útmutatóban. Egyelőre csak tudnunk kell, hogyan kapcsolhatunk mutatót egy változó címéhez.

Fontos megjegyezni: A mutató adattípusa és a változónak meg kell egyeznie, egy int mutató megtarthatja az int változó címét, hasonlóan egy lebegő adattípussal deklarált mutató is eltarthatja az úszó változó címét. Az alábbi példában a mutató és a változó egyaránt int típusú.

Kimenet:

Address of variable num is: 0x7fff5694dc58

C mutatók – Operátorok, amelyeket a mutatókkal használnak

Beszéljük meg a & és * operátorokat, amelyeket a C mutatóban használnak. p>

“(&) Operátor címe

Az első példában már láthattuk, hogy egy változó címét megjeleníthetjük az ampersand használatával jel. A & num-t használtam a num változó címének eléréséhez. Az

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

Megjegyzendő: A% p egy formátummeghatározó, amelyet a cím hexadecimális formátumban történő megjelenítésére használnak.
Most, hogy tudja, hogyan szerezzen be egy változó címe, de hogyan tároljuk ezt a címet valamilyen más változóban? Itt jönnek a képbe a mutatók. Amint az útmutató elején említettük, a C programozás mutatóit használjuk egy másik változó címének megtartására.

A mutató pontosan olyan, mint egy másik változó, a fő különbség az, hogy egy másik változó címét tárolja, nem pedig érték.

“Érték a címen” (*) Operátor

Az * Operátor más néven Érték a címen operátor.

A mutató deklarálása ?

A fenti néhány példa a mutatódeklarációkra. Ha mutatóra van szükség az egész változó címének tárolásához, akkor a mutató adattípusának int kell lennie. Ugyanez a helyzet a többi adattípussal is.

A * operátor használatával egy mutatón keresztül elérhetjük a változó értékét.
Például:

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

* p megadná az a változó értékét. A következő utasítás kimenetként 10-et jelenít meg.

printf("%d", *p);

Hasonlóképpen, ha a * mutatóhoz ilyen értéket rendelünk:

*p = 200;

Megváltoztatja a v értékét szántó a. A fenti utasítás megváltoztatja az a értékét 10-ről 200-ra.

Példa a mutatóra, amely bemutatja az & és *

Output használatát :

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

Vegyünk néhány példát, hogy jobban megértsük –
Mondjuk, hogy van egy char char változó és egy ptr mutató, amely a ch címét tartalmazza.

char ch="a";char *ptr;

Olvassa el a ch értékét

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

A ch értékének megváltoztatása

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

A fenti kód az a értéket helyettesíti b .

Meg tudja tippelni a következő C program kimenetét?

Kimenet:

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

További témák mutatókon

1) Mutató mutatóra – A mutató egy másik mutatóra mutathat (ami azt jelenti, hogy tárolhatja egy másik mutató címét), ezeket a mutatókat kettős mutatónak vagy mutatónak mutatóra hívják.

2) Mutatók továbbítása a függvényhez – A mutatókat argumentumként is át lehet adni egy függvénynek, ennek a szolgáltatásnak a használatával egy függvény meghívható hivatkozással, valamint egy tömb átadható egy függvénynek hívás közben.

3) Funkciómutatók – A függvénymutató olyan, mint egy másik mutató, egy funkció címének tárolására szolgál. A funkciómutató egy funkció függvényének meghívására is használható a C programban.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük