A mutatók a C és a C ++ programozás hatékony tulajdonságai. Mielőtt megtanulnánk a mutatókat, ismerkedjünk meg a címekkel a C programozásban.
Cím a C
Ha a programban van változó változó, &var
megadja a címét a memóriában.
A scanf()
függvény használata során számos alkalommal használtuk a címet.
Itt a felhasználó által megadott érték a var változó címében tárolódik. Vegyünk egy működő példát.
Kimenet
var: 5 address of var: 2686778
Megjegyzés: A fenti kód futtatásakor valószínűleg más címet kap.
C Mutatók
A mutatók (mutatóváltozók) olyan speciális változók, amelyeket nem címek, hanem értékek helyett címek tárolására használnak.
Mutatószintaxis
Így deklarálhatjuk a mutatókat.
Itt deklaráltunk egy int
típusú p mutatót.
Ön ilyen módon is deklarálhatja a mutatókat.
Vegyünk egy másik példát a mutatók deklarálására.
Itt deklaráltunk egy p1 mutatót és egy normális p2 változót.
Címek hozzárendelése mutatókhoz
Vegyünk példát.
Itt 5 van hozzárendelve a c változóhoz. És a c címet a pc mutatóhoz rendeltük.
Get point of point pointing point
Ahhoz, hogy a mutatók által mutatott dolog értékét megkapjuk, a *
operátor. Például:
Itt a c
címet hozzárendelik a pc mutatóhoz. Az adott címben tárolt érték eléréséhez a * pc-t használtuk.
Megjegyzés: A fenti példában a pc mutató, nem pedig *pc
. Nem tehet és nem is tehet például *pc = &c
;
Egyébként a *
-t dereference operátornak hívják ( amikor mutatóval dolgoznak). Mutatóval működik, és megadja a mutatóban tárolt értéket.
Mutatók által mutatott érték megváltoztatása
Vegyünk egy példát.
A c mutatót hozzárendeltük a pc mutatóhoz.
Ezután a c értékét 1-re változtattuk. Mivel a pc és a c címe ugyanaz, a *pc
1-et ad nekünk.
Vegyünk egy másik példát.
A c mutatót hozzárendeltük a pc mutatóhoz.
Ezután a *pc
értéket 1-re változtattuk a *pc = 1;
. Mivel a pc és a c címe megegyezik, a c értéke 1-vel lesz.
Vegyünk még egy példát.
Kezdetben, c címét a pc mutatóhoz rendeljük a pc = &c;
segítségével. Mivel c értéke 5, *pc
5-öt ad.
Ezután ad címét a pc mutatóhoz rendeljük a pc = &d;
segítségével. Mivel d értéke -15, *pc
-15 .
Példa: Mutatók működése
Vegyünk egy működő példát.
Kimenet
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
A program magyarázata
-
int* pc, c;
Itt , egy mutató pc és egy normál c változó, mindkettőint
típusú, létrejön.
Mivel a pc és a c kezdetben nincs inicializálva, a mutató pc vagy nem mutat címre, vagy egy véletlenszerű cím. A c változónak van címe, de véletlenszerű szemétértéket tartalmaz. -
c = 22;
Ez a c változóhoz 22-et rendel. Vagyis 22 a c változó memóriahelyén van tárolva. -
pc = &c;
Ez hozzárendeli a c változó címét a mutató pc-hez. -
c = 11;
Ez 11-et rendel a c változóhoz. -
*pc = 2;
Ez megváltoztatja a memória helyén a mutató által mutatott értéket 2-re.
Gyakori hibák a mutatókkal való munkában
Tegyük fel, hogy a mutató pc-t szeretné mutasson a c címére. Ezután
Itt egy példa a mutatószintaxis kezdőknek gyakran zavarónak találják.
Miért nem kapunk hibát, amikor int *p = &c;
használatával?
Ez azért van, mert
ekvivalens a
Mindkét esetben mutatót hozunk létre p
(nem pedig *p
) és hozzárendeli a &c
-t.
A zavart elkerülése érdekében használhatjuk a következő állítást:
Most már tudod, hogy melyek a mutatók, megtanulod, hogyan mutatók a következő oktatóanyag tömbjeihez kapcsolódnak.