C++ Pointers begrijpen: Een praktische gids
C++ Pointers
Deze tutorial legt C++ pointers uit, hun werking en praktische voorbeelden om u te helpen deze essentiële taalfeature te meesteren.
In C++ is een pointer een variabele die het geheugenadres van een andere variabele bevat. Pointers maken directe geheugenmanipulatie, dynamische allocatie en efficiënte data-afhandeling mogelijk.
Adres in C++
Gegeven een variabele var, geeft de expressie &var het adres in het geheugen terug. Bijvoorbeeld:
Voorbeeld 1: Variabele adressen printen in C++
#include <iostream> using namespace std; int main() { // variabelen declareren int var1 = 3; int var2 = 24; int var3 = 17; // print adres van var1 cout << "Adres van var1: " << &var1 << endl; // print adres van var2 cout << "Adres van var2: " << &var2 << endl; // print adres van var3 cout << "Adres van var3: " << &var3 << endl; }
Output
Adres van var1: 0x7fff5fbff8ac Adres van var2: 0x7fff5fbff8a8 Adres van var3: 0x7fff5fbff8a4
Adressen worden in hexadecimaal formaat weergegeven. Het verschil van 4 bytes tussen opeenvolgende adressen weerspiegelt de 4-byte grootte van een int op een 64-bit systeem.
Let op: De exacte adressen kunnen elke keer variëren wanneer u het programma uitvoert.
C++ Pointers
Zoals getoond, slaan pointers adressen op in plaats van directe waarden. Een pointer declareren is eenvoudig:
int *pointVar;
Hier is pointVar een pointer naar een int. De voorkeurssyntax plaatst de asterisk naast het type:
int* pointVar; // voorkeurssyntax
Meerdere declaraties zijn ook mogelijk:
int* pointVar, p;
In deze regel is pointVar een pointer, terwijl p een reguliere int is. De asterisk associeert met de variabelenaam, niet het type.
Tip: De * operator wordt gebruikt om pointers te declareren, niet om vermenigvuldiging uit te voeren.
Adressen toewijzen aan pointers
Om een pointer aan een variabeladres te binden, gebruik de address-of operator &:
int* pointVar, var; var = 5; // wijs adres van var toe aan pointVar pointer pointVar = &var;
Nu houdt pointVar het geheugenadres van var.
De waarde ophalen van het adres met pointers
De dereferentie-operator * haalt de waarde op die opgeslagen is op het adres dat een pointer bevat:
int* pointVar, var; var = 5; pointVar = &var; cout << *pointVar << endl; // Output: 5
Hier levert *pointVar de waarde van var (5) op. De operator heet de dereferentie-operator.
Let op: In C++ zijn pointVar (de pointer) en *pointVar (de waarde waarnaar het wijst) distincte entiteiten.
Voorbeeld 2: Werking van C++ Pointers
#include <iostream> using namespace std; int main() { int var = 5; // pointer variabele declareren int* pointVar; // adres van var opslaan pointVar = &var; // print waarde van var cout << "var = " << var << endl; // print adres van var cout << "Adres van var (&var) = " << &var << endl << endl; // print pointer pointVar cout << "pointVar = " << pointVar << endl; // print de inhoud van het adres waar pointVar naar wijst cout << "Inhoud van het adres waar pointVar naar wijst (*pointVar) = " << *pointVar << endl; return 0; }
Output
var = 5 Adres van var (&var) = 0x61ff08 pointVar = 0x61ff08 Inhoud van het adres waar pointVar naar wijst (*pointVar) = 5
De waarde wijzen waar pointers naar wijzen
Als pointVar naar var wijst, wijzigt het aanpassen van *pointVar de originele variabele:
int var = 5; int* pointVar; pointVar = &var; *pointVar = 1; cout << var << endl; // Output: 1
Zowel pointVar als &var houden hetzelfde adres; het aanpassen van de gedereferendeerde waarde werkt var bij.
Voorbeeld 3: Waarde wijzigen waar pointers naar wijzen
#include <iostream> using namespace std; int main() { int var = 5; int* pointVar; // adres van var opslaan pointVar = &var; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Waarde van var wijzigen naar 7:" << endl; // waarde van var wijzigen naar 7 var = 7; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl << endl; cout << "Waarde van *pointVar wijzigen naar 16:" << endl; // waarde van var wijzigen naar 16 *pointVar = 16; // print var cout << "var = " << var << endl; // print *pointVar cout << "*pointVar = " << *pointVar << endl; return 0; }
Output
var = 5 *pointVar = 5 Waarde van var wijzigen naar 7: var = 7 *pointVar = 7 Waarde van *pointVar wijzigen naar 16: var = 16 *pointVar = 16
Veelvoorkomende fouten bij werken met pointers
Hieronder staan typische fouten en de correcte manier om pointers te hanteren:
int var, *varPoint; // Fout! varPoint is een adres maar var is het niet varPoint = var; // Fout! // &var is een adres // *varPoint is de waarde opgeslagen in &var *varPoint = &var; // Correct! // varPoint is een adres en zo is &var varPoint = &var; // Correct! // zowel *varPoint als var zijn waarden *varPoint = var;
Aanbevolen Leesstof:
- Hoe generieke datatype pointers te gebruiken met een void pointer?
- Hoe een array weer te geven met een pointer?
- Hoe pointers met functies te gebruiken?
- Hoe pointers met structuren te gebruiken?

C Taal
- C++ datatypes begrijpen: fundamentals, modifiers en best practices
- C++ operators: complete gids met praktische voorbeelden
- C++ comments: best practices voor leesbare, onderhoudbare code
- C++ Class Templates Beheersen: Een Praktische Gids
- C-pointers onder de knie krijgen: Een praktische, expert-gids
- C++ Pointers Onder de Knie: Concepten, Voorbeelden & Praktische Toepassingen
- C-pointers: Praktische stappen naar geavanceerd programmeren
- C++ Programmeertaal: Overzicht & Belangrijkste Kenmerken
- C++ Constanten & Literals Uitgelegd: Types, Syntax en Best Practices
- Uitgebreide Gids voor C++ Operators: Types, Gebruik en Best Practices
- Numerieke Typen in C++ Beheersen: Een Praktische Gids