Millised on C ++ näpunäited?

Osutab c ++ kõige võimsamale tööriistale, see aitab programmeerijal mälust otse juurde pääseda ja sellega manipuleerida. Näiteks kui muutuja luuakse, on kompilaatori ülesanne mälu eraldamine muutuja väärtuse salvestamiseks. Ja see väärtus saadakse andmetele määratud muutuja nime abil. C ++ ühildub andmete salvestamise ja mälust toomisega, viidates mäluasukoha aadressile, kus andmeid hoitakse. C ++ täidab osuti isegi osutiga.

Süntaks

Osuti deklaratsiooni üldine vorming on:

Data_type * pointer -variable-name

Pange tähele, et osutimuutujale peaks eelnema tärn (*)

Näide: int * xptr;

Muutuja xptr on osutus täisarvule. Üldiselt võivad osuti muutujad osutada täisarvu muutujatele, märgimuutujatele, massiividele, failidele, funktsioonidele.

Miks on meil C ++-s näpunäiteid vaja?

Dünaamiline mälujaotus on C ++ -s osutite abil lihtne, osutite kõige olulisem tähtsus on see, et nad on eri andmetüüpide käsitlemisel palju tõhusamad. Need suurendavad täitmiskiirust, kui funktsioon tagastab ühe väärtuse, ja annavad ka juurdepääsu funktsioonist väljaspool määratletud muutujale. Kõige tavalisem kasutus hõlmab andmehaldust ja juurdepääsu klassiliikme funktsioonidele.

Kuidas luua viiteid C ++ -s?

Siin on järgmised juhised C ++ -s kursorite loomiseks

1. samm - viidete lähtestamine

Soovitav on osuti muutujad lähtestada kohe, kui need on deklareeritud. Kuna osutimuutujad salvestavad aadresse, saavad nad adresseerida mälu mis tahes osa.

int *a; // pointer to an integer
double *da; // pointer to a double
float *fa; // pointer to afloat
char *ch // character pointer

Vaatleme järgmist näidet:

int p, * pi; // See avaldus käsib kompilaatoril reserveerida mälus muutuja p jaoks ruumi täisarvu hoidmiseks.

pi = & a; // Määrab täisarvu muutuja p aadressi muutujale. Näiteks kui p aadress on 4581, siis * pi väärtus on võrdne 4581.

2. samm - osuti on tühine

Siin lubatakse osutimuutujal osutada mis tahes andmetüübile ja seda tüüpi kasutatakse osutite edastamisel funktsiooniks, mis töötab sõltumatult osutatavast andmetüübist.

Süntaks: void * osuti muutuja;

Näide:

#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 "< )

Väljund:

$ g ++ -o main * .cpp
$ peamine
iv tähistatud väärtus on 3
X aadress on 0x7ffefbbee6d4
fv-ga märgitud väärtus on 45, 2
F-i aadress on 0x7ffefbbee6d0
X aadress on 0x7ffefbbee6d4

f-i aadress on 0x7ffefbbee6d0

3. samm - osuti aritmeetilised operatsioonid C ​​++ -s

Pointer aritmeetikat teostatakse massiividega. Osutitega saab teha järgmisi toiminguid. Nemad on:

  • Suurendamine (++)
  • Dekreet (-)
  • Osuti lisamine
  • Osuti lahutamine

Kui lisame osutile 1, täpsustab see osuti suuruse suurendamist.

Allpool olev programm täpsustab osuti aritmeetikat, mis töötab kuni massiivi lõppu.

#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;
)

Väljund:

$ g ++ -o main * .cpp
$ peamine
2

4

6

8

10

12

14

16

18

20

0

0

4196480

0

-1743362854

32686

1

0

153860328

32766

4. samm - osuti kursorini

ujuk ** fpp;

See tähistab osutite kahte taset ( mitu indirektsiooni ). See on muutuja, mis osutab teisele osutile ja osutab mälu asukohas määratletud objektile. Näiteks kui fpp on ujukkursor, mis osutab praegu mäluaadressile 2001, ujuki suurus on 8 baiti, siis

fpp ++;

tähistab fpp, mis osutab aadressile 2009. Samamoodi osutab muutuja vähendamisel 1-ga see oma põhitüübi eelmisele asukohale aadressil 1993.

5. samm - osutus funktsioonidele

Kui osutid antakse funktsioonile argumentidena, muudetakse nende osuti muutujaga seotud andmeühikuid funktsiooni piires ja tagastatakse seejärel kutsuvale programmile, muudatused säilitatakse kutsuvas programmis. Kui osuti antakse parameetrina, muudetakse vastavaid andmeühikuid kutsutud funktsiooni piires globaalselt. Kursor kulgeb viitega. Funktsioone saab osutites täita erineval viisil:

  1. funktsioon, millele tuginetakse viite edastamisel
  2. Funktsioon, millele osutatakse kursori möödumisel

Funktsioon, mille käivitas viite edastamine

Selles antakse aadress väärtuste asemel argumendina.

Näide:

#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;
)

Väljund:

$ g ++ -o main * .cpp
$ peamine
Enne muutmist

n = 5

m = 6

Pärast muutust

n = 6

m = 5

Järeldus

Selle artikli eesmärk oli värskendada teadmisi C ++ osutamisel osutite ja nende põhiteemade lihtsal kasutamisel koos näitega. Pointer on tuntud ka kui lokaator, mis vähendab koodiväljaannet suurema jõudluse saavutamiseks. Osutitel on oluline roll selliste andmestruktuuride rakendamisel nagu lingitud loend ja programmeerimine süsteemitasandil. Need on manustatud süsteemides eelistatuimad keeled, kuna need on hea viis mälu juurde pääsemiseks otse kursorite abil.

Soovitatavad artiklid

See on juhend kursoritele C ++ -s. Siin arutatakse, kuidas luua näiteid C ++ -s koos toodud näidete ja väljundiga ning miks me seda vajame. Lisateabe saamiseks võite vaadata ka järgmist andmeanalüüsi kursust

  1. Näpunäited Pythonis
  2. Andmetüübid C-s
  3. Massiivid C ++
  4. Tähemustrid c ++ -s
  5. Kuidas osundajad töötavad C # -s?

Kategooria: