Melyek a C ++ mutatói?
Mutatja a c ++ legerősebb eszközét, segít a programozónak a memória közvetlen elérésében és kezelésében. Például egy változó létrehozásakor a fordító feladata a memória allokálása a változó értékének tárolására. És ezt az értéket az adatokhoz rendelt változónév alapján állítják elő. A C ++ kompatibilis azzal, hogy tárolja és begyűjti az adatokat a memóriából arra a memóriahely címére hivatkozva, amelyben az adatokat tárolja. A C ++ még mutatókat is végrehajthat egy mutatón.
Szintaxis
A mutatónyilatkozat általános formátuma:
Data_type * pointer -variable-name
Vegye figyelembe, hogy a mutatóváltozót csillag (*) előzi meg
Példa: int * xptr;
Az xptr változó egy egész szám mutatója. Általában a mutatóváltozók egész számokra, karakterváltozókra, tömbökre, fájlokra, függvényekre mutathatnak.
Miért van szükség mutatókra a C ++-ban?
A dinamikus memóriaelosztás egyszerűvé válik a C ++ alkalmazásban a mutatók használatával, a mutatók legfontosabb jelentőségét az jelenti, hogy sokkal hatékonyabban kezelik a különböző adattípusokat. Növelik a végrehajtási sebességet, amikor a függvény egy értéket ad vissza, és kézhez adják a függvényen kívül definiált változó elérését is. A leggyakoribb használat az adatkezelés és az osztálytag funkcióinak elérése.
Hogyan hozhatunk létre mutatókat a C ++ programban?
A következő lépésekkel hozhat létre mutatókat a C ++ rendszerben
1. lépés - A mutatók inicializálása
Javasolt a mutatóváltozókat inicializálni, amint azok deklarálásra kerülnek. Mivel a mutatóváltozók tárolják a címeket, a memória bármelyik részét képesek kezelni.
int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer
Vegyük figyelembe a következő példát:
int p, * pi; // Ez az utasítás utasítja a fordítót, hogy hagyjon helyet a memóriában lévő p változó számára egy egész érték tartására.
pi = & a; // A p egész szám változó címét rendeli a mutató változóhoz. Például, ha p címe 4581, akkor a * pi értéke 4581 lesz.
2. lépés - A mutató érvénytelen
Itt a mutatóváltozó bármilyen adattípust megmutathat, és ezt a típust a mutatók átadására használják, hogy a megjelölt adattípustól függetlenül működjenek.
Szintaxis: void * mutató változó;
Példa:
#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )#include
#include
using namespace std;
int main ()
(
int x, *iv;
float f, *fv;
void *vp;
x=3;
f=45.2;
iv=&x;
fv=&f;
vp=&x;
cout<< "the value pointed by iv is "<<*iv<< endl;
cout<< "The address of x is "< cout<< "the value pointed by fv is "<<*fv<< endl;
cout<< "The address of f is "< cout<< "The address of x is "< vp= &f;
cout<< "the address of f is "< )
Kimenet:
$ g ++ -o main * .cpp
$ fő
az iv által jelzett érték 3
X címe 0x7ffefbbee6d4
az fv által jelzett érték 45, 2
F címe 0x7ffefbbee6d0
X címe 0x7ffefbbee6d4
f címe 0x7ffefbbee6d0
3. lépés - Mutatók aritmetikai műveletei C ++-ban
A mutató aritmetikáját tömbökkel hajtják végre. Az alábbi műveletek végrehajthatók a mutatókon. Ők:
- Növekedés (++)
- Rendelet (-)
- Mutató hozzáadása
- Mutató kivonás
Ha az 1-et hozzáadjuk a mutatóhoz, akkor megjelöli a mutatóra mutató méret méretét.
Az alábbi program meghatározza a mutató számtani működését, amíg addig működik, amíg a tömb végére nem kerül.
#include
#include
using namespace std;
void pointerarithmetic(int a(), int size)
(
int *e, *t; //Declaring two int pointers variables
e = a; //assigning e to point the arrays initial element a(0) t = a + size; // assigning variable t to the array last element
while(e != t)
(
cout << *e << endl; //displays the e
e++; // incrementing ( next element)
)
)
int main()
(
int a() = (2, 4, 6, 8, 10, 12, 14, 16, 18, 20);
pointerarithmetic (a, 20);
return 0;
)
Kimenet:
$ g ++ -o main * .cpp
$ fő
2
4
6
8
10
12
14
16
18
20
0
0
4196480
0
-1743362854
32686
1
0
153860328
32766
4. lépés - Mutató a mutatóhoz
úszó ** fpp;
A mutatók két szintjét jelöli ( többszörös indirekciók ). Ez egy változó, amely egy másik mutatóra mutat, ráadásul a memóriahelyen megadott objektumra mutat. Például, ha az fpp egy úszó mutató, amely jelenleg a 2001-es memóriacímre mutat, az úszó mérete 8 byte, majd
FPP ++;
Hasonlóképpen, ha a változót 1-gyel csökkentik, akkor az alaptípus korábbi helyére mutat, az 1993-as címen.
5. lépés - A funkciók mutatója
Amikor a mutatókat argumentumként továbbítják egy funkcióhoz, az ezekkel a mutatók változójával társított adatelemeket megváltoztatják a függvényen belül, majd visszatérnek a hívó programhoz, a változtatások megmaradnak a hívó programban. Ha egy mutatót paraméterként adunk át, akkor a vonatkozó adatelemek globálisan megváltoznak a meghívott funkción belül. A mutatót referenciaként adja át. A funkciók mutatókkal különféle módon hajthatók végre:
- a referencia átadásával meghívott függvény
- A mutató elhaladásával indított funkció
A függvény a referencia átadásával hívja fel a figyelmet
Ebben az esetben a címet argumentumként adják át az értékek helyett.
Példa:
#include
using namespace std;
void changefn(int*, int*);
int main()
(
int n = 5, m = 6;
cout << "Before change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
changefn(&n, &m);
cout << "\nAfter change" << endl;
cout << "n = " << n << endl;
cout << "m = " << m << endl;
return 0;
)
void changefn(int* x1, int* x2) (
int s1;
s1 = *x1;
*x1 = *x2;
*x2 = s1;
)
Kimenet:
$ g ++ -o main * .cpp
$ fő
Változás előtt
n = 5
m = 6
Változás után
n = 6
m = 5
Következtetés
A cikk célja, hogy frissítse a C ++ mutatók és alapvető témáik egyszerű használatával kapcsolatos ismereteit egy példával. A Pointer néven is ismert, mivel a locator csökkenti a kódkifejezést a jobb teljesítmény érdekében. A mutatók létfontosságú szerepet játszanak az adatszerkezetek, például a csatolt lista és a programozás rendszerszintű megvalósításában. Ezek a legelőnyösebb nyelvek a beágyazott rendszerekben, mivel ezek jó módszer a memória közvetlen elérésére a mutatók segítségével.
Ajánlott cikkek
Ez egy útmutató a C ++ mutatókhoz. Itt tárgyaljuk, hogyan hozhatunk létre mutatókat a C ++ programban, a megadott példákkal és kimenetekkel, és miért van szükségünk rá. További információt a következő adatelemzési tanfolyamon is megnézhet
- Mutatók a Pythonban
- Adattípusok C-ben
- Tömbök C ++-ban
- Csillagminták c ++ -ban
- Hogyan működik a mutatók a C # -ben?