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 0x
aan 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 int
variabele 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 int
type 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 5
wordt 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 *pointVar
om 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

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 &var
hebben 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?