Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Industrial programming >> C Sprache

C++-Zeiger

C++-Zeiger

In diesem Tutorial lernen wir Pointer in C++ und deren Funktionsweise anhand von Beispielen kennen.

In C++ sind Zeiger Variablen, die die Speicheradressen anderer Variablen speichern.

Adresse in C++

Wenn wir eine Variable var haben in unserem Programm &var wird uns seine Adresse im Speicher geben. Zum Beispiel

Beispiel 1:Variablenadressen in C++ drucken

#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;
}

Ausgabe

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

Hier, 0x am Anfang steht die Adresse in hexadezimaler Form.

Beachten Sie, dass sich die erste Adresse von der zweiten um 4 Bytes und die zweite Adresse von der dritten um 4 Bytes unterscheidet.

Dies liegt an der Größe einer int Variable ist 4 Bytes in einem 64-Bit-System.

Hinweis: Sie erhalten möglicherweise nicht die gleichen Ergebnisse, wenn Sie das Programm ausführen.


C++-Zeiger

Wie oben erwähnt, werden Zeiger verwendet, um Adressen statt Werte zu speichern.

So können wir Zeiger deklarieren.

int *pointVar;

Hier haben wir einen Zeiger pointVar deklariert der int Typ.

Wir können Zeiger auch folgendermaßen deklarieren.

int* pointVar; // preferred syntax

Nehmen wir ein weiteres Beispiel für das Deklarieren von Zeigern.

int* pointVar, p;

Hier haben wir einen Zeiger pointVar deklariert und eine normale Variable p .

Hinweis: Die * Operator wird nach dem Datentyp verwendet, um Zeiger zu deklarieren.


Adressen Zeigern zuweisen

So können wir Zeigern Adressen zuweisen:

int* pointVar, var;
var = 5;

// assign address of var to pointVar pointer
pointVar = &var;

Hier, 5 wird der Variablen var zugewiesen . Und die Adresse von var wird der pointVar zugewiesen Zeiger mit dem Code pointVar = &var .


Erhalte den Wert aus der Adresse mithilfe von Zeigern

Um den Wert zu erhalten, auf den ein Zeiger zeigt, verwenden wir den * Operator. Zum Beispiel:

int* pointVar, var;
var = 5;

// assign address of var to pointVar
pointVar = &var;

// access value pointed by pointVar
cout << *pointVar << endl;   // Output: 5

Im obigen Code wird die Adresse von var pointVar zugewiesen . Wir haben den *pointVar verwendet um den in dieser Adresse gespeicherten Wert abzurufen.

Wenn * mit Zeigern verwendet wird, wird er als Dereferenzierungsoperator bezeichnet . Es arbeitet mit einem Zeiger und gibt den Wert aus, auf den die im Zeiger gespeicherte Adresse zeigt. Das heißt *pointVar = var .

Hinweis:In C++, PunktVar und *pointVar ist komplett anders. Wir können so etwas wie *pointVar = &var; nicht machen


Beispiel 2:Funktionsweise von C++-Zeigern

#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;
}

Ausgabe

var = 5
Address of var (&var) = 0x61ff08

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

Ändern des Werts, auf den durch Zeiger verwiesen wird

Wenn pointVar zeigt auf die Adresse von var , können wir den Wert von var ändern durch Verwendung von *pointVar .

Zum Beispiel

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 und &var dieselbe Adresse haben, den Wert von var wird auch geändert, wenn *pointVar geändert.


Beispiel 3:Wert ändern, auf den Zeiger zeigen

#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;
}

Ausgabe

var = 5
*pointVar = 5

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

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

Häufige Fehler beim Arbeiten mit Zeigern

Angenommen, wir wollen einen Zeiger varPoint auf die Adresse von var zeigen . Dann

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;

Empfohlene Lektüre :

  • Wie verwendet man generische Datentypzeiger mit einem void-Zeiger?
  • Wie stellt man ein Array mit einem Zeiger dar?
  • Wie verwende ich Zeiger mit Funktionen?
  • Wie verwendet man Zeiger mit Strukturen?

C Sprache

  1. C++-Datentypen
  2. C++-Operatoren
  3. C++-Kommentare
  4. C++-Klassenvorlagen
  5. C-Zeiger
  6. C++-Zeiger mit Beispielen
  7. C - Zeiger
  8. C++-Übersicht
  9. C++ Konstanten/Literale
  10. Operatoren in C++