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.