Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Allocation Dynamique de Pointeur à Pointeur | Allocation Dynamique de Mémoire
C++ Pointeurs et Références

book
Allocation Dynamique de Pointeur à Pointeur

Un pointeur vers pointeur, noté double pointeur (**).

C'est un pointeur qui contient l'adresse mémoire d'un autre pointeur. En d'autres termes, c'est une variable dont la valeur est l'adresse d'un autre pointeur. Ce concept peut sembler complexe au début, mais il offre un mécanisme puissant pour gérer l'allocation dynamique de mémoire avancée.

Syntaxe

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: est un pointeur vers un entier (int*);
  • ptr2: est un double pointeur vers un entier (int**).

Allocation dynamique d'un tableau à deux dimensions

Si vous souhaitez créer dynamiquement (à l'exécution) un tableau à deux dimensions, vous devez utiliser un pointeur vers un pointeur pour les lignes.

Ensuite, initialisez chaque ligne avec un tableau dynamique (comme dans le chapitre précédent)

Tâche

Swipe to start coding

  • Allouer dynamiquement un tableau à deux dimensions.
  • Allouer dynamiquement les tableaux en tant qu'éléments.
  • Libérer toute la mémoire allouée.

Solution

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

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 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;
}
toggle bottom row
some-alt