C ++ -aanwijzers

In deze tutorial leren we aan de hand van voorbeelden over aanwijzingen in C ++ en hoe ze werken.

In C ++ zijn pointers variabelen die de geheugenadressen van andere variabelen opslaan.

Adres in C ++

Als we een variabele var in ons programma hebben, zal & var ons zijn adres in het geheugen geven. Bijvoorbeeld,

Voorbeeld 1: variabele adressen afdrukken in C ++

 #include using namespace std; int main() ( // declare variables int var1 = 3; int var2 = 24; int var3 = 17; // print address of var1 cout << "Address of var1: "<< &var1 << endl; // print address of var2 cout << "Address of var2: " << &var2 << endl; // print address of var3 cout << "Address of var3: " << &var3 << endl; )

Uitvoer

 Adres van var1: 0x7fff5fbff8ac Adres van var2: 0x7fff5fbff8a8 Adres van var3: 0x7fff5fbff8a4

Hier stelt 0xaan het begin het adres in hexadecimale vorm voor.

Merk op dat het eerste adres 4 bytes verschilt van het tweede en het tweede adres 4 bytes verschilt van het derde.

Dit komt doordat de grootte van een intvariabele 4 bytes is in een 64-bits systeem.

Opmerking: het is mogelijk dat u niet dezelfde resultaten krijgt als u het programma uitvoert.

C ++ -aanwijzers

Zoals hierboven vermeld, worden pointers gebruikt om adressen op te slaan in plaats van waarden.

Hier is hoe we aanwijzingen kunnen geven.

 int *pointVar;

Hier hebben we een pointer pointVar van het inttype verklaard .

We kunnen ook op de volgende manier aanwijzingen geven.

 int* pointVar; // preferred syntax

Laten we nog een voorbeeld nemen van het aangeven van aanwijzingen.

 int* pointVar, p;

Hier hebben we een pointer pointVar en een normale variabele p gedeclareerd.
Opmerking: de *operator wordt gebruikt na het gegevenstype om pointers te declareren.

Adressen toewijzen aan pointers

Hier is hoe we adressen kunnen toewijzen aan verwijzingen:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointer pointVar = &var;

Hier 5wordt toegewezen aan de variabele var. En het adres van var wordt toegewezen aan de pointVar-pointer met de code pointVar = &var.

Haal de waarde uit het adres met behulp van pointers

Om de waarde door een pointer te laten wijzen, gebruiken we de *operator. Bijvoorbeeld:

 int* pointVar, var; var = 5; // assign address of var to pointVar pointVar = &var; // access value pointed by pointVar cout << *pointVar << endl; // Output: 5

In de bovenstaande code wordt het adres van var toegewezen aan pointVar. We hebben de gebruikt *pointVarom de waarde op te halen die op dat adres is opgeslagen.

Wanneer *wordt gebruikt met pointers, wordt dit de dereferentie-operator genoemd . Het werkt op een aanwijzer en geeft de waarde weer die wordt aangegeven door het adres dat in de aanwijzer is opgeslagen. Dat is *pointVar = var,.

Opmerking: in C ++ zijn pointVar en * pointVar compleet verschillend. We kunnen zoiets niet doen*pointVar = &var;

Voorbeeld 2: werking van C ++ Pointers

 #include using namespace std; int main() ( int var = 5; // declare pointer variable int* pointVar; // store address of var pointVar = &var; // print value of var cout << "var = " << var << endl; // print address of var cout << "Address of var (&var) = " << &var << endl << endl; // print pointer pointVar cout << "pointVar = " << pointVar << endl; // print the content of the address pointVar points to cout << "Content of the address pointed to by pointVar (*pointVar) = " << *pointVar << endl; return 0; )

Uitvoer

 var = 5 Adres van var (& var) = 0x61ff08 pointVar = 0x61ff08 Inhoud van het adres waarnaar wordt verwezen door pointVar (* pointVar) = 5
Werken met C ++ - pointers

Veranderende waarde aangegeven door pointers

Als pointVar naar het adres van var verwijst, kunnen we de waarde van var wijzigen door * pointVar te gebruiken.

Bijvoorbeeld,

 int var = 5; int* pointVar; // assign address of var pointVar = &var; // change value at address pointVar *pointVar = 1; cout << var << endl; // Output: 1

Hier, pointVar en &varhebben hetzelfde adres, de waarde van var zal ook worden gewijzigd wanneer * pointVar wordt gewijzigd.

Voorbeeld 3: waarde wijzigen met aanwijzers

 #include using namespace std; int main() ( int var = 5; int* pointVar; // store address of var pointVar = &var; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of var to 7:" << endl; // change value of var to 7 var = 7; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Changing value of *pointVar to 16:" << endl; // change value of var to 16 *pointVar = 16; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl; return 0; )

Uitvoer

 var = 5 * pointVar = 5 Veranderende waarde van var naar 7: var = 7 * pointVar = 7 Veranderende waarde van * pointVar naar 16: var = 16 * pointVar = 16 

Veelgemaakte fouten bij het werken met pointers

Stel dat we willen dat een pointer varPoint verwijst naar het adres van var. Vervolgens,

 int var, *varPoint; // Wrong! // varPoint is an address but var is not varPoint = var; // Wrong! // &var is an address // *varPoint is the value stored in &var *varPoint = &var; // Correct! // varPoint is an address and so is &var varPoint = &var; // Correct! // both *varPoint and var are values *varPoint = var;

Aanbevolen metingen :

  • Hoe generieke aanwijzers van het gegevenstype te gebruiken met een lege aanwijzer?
  • Hoe een array weergeven met een pointer?
  • Hoe verwijzingen met functies te gebruiken?
  • Hoe pointers met structuren te gebruiken?

Interessante artikelen...