Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Zeiger-zu-Zeiger Dynamische Zuweisung | Dynamische Speicherzuweisung
C++ Zeiger und Referenzen

book
Zeiger-zu-Zeiger Dynamische Zuweisung

Ein Zeiger auf Zeiger, bezeichnet als Doppelzeiger (**).

Dies ist ein Zeiger der die Speicheradresse eines anderen Zeigers enthält. Einfach ausgedrückt, ist es eine Variable, deren Wert die Adresse eines anderen Zeigers ist. Dieses Konzept mag zunächst komplex klingen, bietet jedoch einen leistungsstarken Mechanismus zum Umgang mit fortgeschrittener dynamischer Speicherzuweisung.

Syntax

cpp

main

copy
#include <iostream>

int main()
{
int x = 10;
int *ptr1 = &x;
int **ptr2 = &ptr1;

// Accessing values using double pointer
std::cout << "Location of ptr2: " << ptr2 << std::endl;
std::cout << "Location of ptr1: " << *ptr2 << std::endl;
std::cout << "Value of x: " << **ptr2 << std::endl;
}
12345678910111213
#include <iostream> int main() { int x = 10; int *ptr1 = &x; int **ptr2 = &ptr1; // Accessing values using double pointer std::cout << "Location of ptr2: " << ptr2 << std::endl; std::cout << "Location of ptr1: " << *ptr2 << std::endl; std::cout << "Value of x: " << **ptr2 << std::endl; }
  • ptr1: ist ein Zeiger auf einen Integer (int*);

  • ptr2: ist ein doppelter Zeiger auf einen Integer (int**).

Dynamische Speicherzuweisung für ein zweidimensionales Array

Wenn Sie ein zweidimensionales Array dynamisch (zur Laufzeit) erstellen möchten, müssen Sie einen Zeiger auf einen Zeiger für die Zeilen verwenden.

Und dann jede Zeile mit einem dynamischen Array initialisieren (wie im vorherigen Kapitel)

Aufgabe

Swipe to start coding

  • Weisen Sie ein zweidimensionales Array dynamisch zu.
  • Weisen Sie die Arrays als Elemente dynamisch zu.
  • Geben Sie den gesamten zugewiesenen Speicher wieder frei.

Lösung

cpp

solution

#include <iostream>

int main()
{
int rows = 3, columns = 5;
int **twoDArray = new int*[rows];
for (int row = 0; row < rows; row++)
twoDArray[row] = new int[columns];
for (int row = 0; row < rows; row++)
for (int column = 0; column < columns; column++)
{
twoDArray[row][column] = row * columns + column;
std::cout << twoDArray[row][column] << ' ';
}
for (int row = 0; row < rows; row++)
delete[] twoDArray[row];
delete[] twoDArray;
}

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 4
#include <iostream>

int main()
{
int rows = 3, columns = 5;
int __twoDArray = ___ int_[rows];
for (int row = 0; row < rows; row++)
twoDArray[row] = ___ int[columns];

// Initialization of the array with some values
for (int row = 0; row < rows; row++)
for (int column = 0; column < columns; column++)
{
twoDArray[row][column] = row * columns + column;
std::cout << twoDArray[row][column] << ' ';
}

for (int row = 0; row < rows; row++)
___[] twoDArray[_];
___[] twoDArray;
}

Fragen Sie AI

expand
ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

We use cookies to make your experience better!
some-alt