Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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++ Pointers begrijpen: Een praktische gids

C Taal

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