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++-aanwijzers

C++-aanwijzers

In deze tutorial leren we over pointers in C++ en hun werking met behulp van voorbeelden.

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

Adres in C++

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

Voorbeeld 1:Variabele adressen afdrukken in C++

#include <iostream>
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

Address of var1: 0x7fff5fbff8ac
Address of var2: 0x7fff5fbff8a8
Address of var3: 0x7fff5fbff8a4

Hier, 0x aan het begin geeft aan dat het adres in hexadecimale vorm is.

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

Dit komt omdat de grootte van een int variabele is 4 bytes in een 64-bits systeem.

Opmerking: U krijgt mogelijk niet dezelfde resultaten 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 pointers kunnen declareren.

int *pointVar;

Hier hebben we een pointer pointVar . gedeclareerd van de int typ.

We kunnen pointers ook op de volgende manier declareren.

int* pointVar; // preferred syntax

Laten we nog een voorbeeld nemen van het declareren van pointers.

int* pointVar, p;

Hier hebben we een pointer pointVar . gedeclareerd en een normale variabele p .

Opmerking: De * operator wordt gebruikt na het datatype om pointers te declareren.


Adressen toewijzen aan aanwijzers

Hier is hoe we adressen aan pointers kunnen toewijzen:

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 is toegewezen aan de pointVar aanwijzer met de code pointVar = &var .


Verkrijg de waarde van het adres met behulp van aanwijzers

Om de waarde te krijgen die door een aanwijzer wordt aangeduid, gebruiken we de * exploitant. 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 is het adres van var toegewezen aan pointVar . We hebben de *pointVar . gebruikt om de waarde op dat adres te krijgen.

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

Opmerking:in C++, pointVar en *pointVar is totaal anders. We kunnen niet zoiets doen als *pointVar = &var;


Voorbeeld 2:Werking van C++-aanwijzers

#include <iostream>
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
Address of var (&var) = 0x61ff08

pointVar = 0x61ff08
Content of the address pointed to by pointVar (*pointVar) = 5

Waarde wijzigen die wordt aangegeven door aanwijzers

Als pointVar verwijst naar het adres van var , 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 hetzelfde adres hebben, de waarde van var wordt ook gewijzigd wanneer *pointVar is gewijzigd.


Voorbeeld 3:Waarde wijzigen die wordt aangegeven door aanwijzers

#include <iostream>
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

Changing value of var to 7:
var = 7
*pointVar = 7

Changing value of *pointVar to 16:
var = 16
*pointVar = 16

Veelgemaakte fouten bij het werken met pointers

Stel, we willen een aanwijzer varPoint om naar het adres van var . te wijzen . Dan,

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 gegevenstype-aanwijzers gebruiken met een lege aanwijzer?
  • Hoe een array weergeven met een aanwijzer?
  • Hoe gebruik ik aanwijzers met functies?
  • Hoe gebruik ik aanwijzers met structuren?

C Taal

  1. C++-gegevenstypen
  2. C++-operators
  3. C++ Opmerkingen
  4. C++-klassesjablonen
  5. C-aanwijzers
  6. C++-aanwijzers met voorbeelden
  7. C - Aanwijzers
  8. C++-overzicht
  9. C++-constanten/letters
  10. Operatoren in C++
  11. Getallen in C++