Initiation aux pointeurs

Premiers pas avec les pointeurs

Les pointeurs sont des variables qui stockent l’adresse d’une autre variable. En tant que fonctionnalité de langage, ils sont disponibles dans plusieurs langages de programmation comme, mais sans s’y limiter :

  • Aller -C/C++ -Ada -Pascal
  • C# (disponible sous certaines contraintes) -COBOL
  • FORTRAN

Pour démarrer avec les pointeurs C/C++ , suivez ces étapes

  1. Installez un compilateur comme Minimalistic GNU pour Windows, http://www.mingw.org/wiki/Getting_Started

  2. Accédez au dossier d’installation du binaire g++ via la ligne de commande, par exemple :

    C:\MinGW\bin>
    

3.Créez un fichier texte et écrivez ce programme C++

#include <iostream>

int main () {

   int  pointed=0;
   int* ptr = & pointed;

   std::cout<<"Address of pointed variable is: "<<ptr<<std::endl;

   return 0;
}
  1. Enregistrer sous pointer.cpp 5.Sur l’invite de commande, exécutez la commande

g++ -o pointeur.exe -c pointeur.cpp

  1. Dans le répertoire de travail, vous obtiendrez un exécutable en tant que pointer.exe , cet exe lors de l’exécution donnera une sortie comme

L’adresse de la variable pointée est : 0x7e892dac0a0c

Si vous recevez la sortie ci-dessus, vous avez écrit votre premier programme de pointeur

Qu’est-ce qu’un pointeur ?

Il s’agit essentiellement de l’adresse d’une variable en mémoire. Il nous permet d’accéder indirectement à une variable. Ainsi, en utilisant des pointeurs, nous pouvons parler de l’adresse d’une variable (ainsi que de sa valeur en déréférencant le pointeur). Ils sont utiles lorsque nous voulons traiter l’adresse d’un emplacement mémoire plutôt que sa valeur.

Considérez la simple fonction d’échange suivante en C :

void Swap(int firstVal, int secondVal)
{
 int tempVal = firstVal;
 firstVal = secondVal;
 secondVal = tempVal;
}

maintenant dans main si nous avons le code suivant :

.
.
int a = 9,b = 100;
swap(a,b);
//print a and b
.
.

Les valeurs de a et b resteraient inchangées, comme on le verrait en imprimant leurs valeurs dans la fonction principale. Pour implémenter correctement la fonction d’échange, au lieu de transmettre les valeurs des variables a et b, nous transmettons l’adresse des variables a et b comme :

swap(&a,&b);

L’opérateur &, renvoie l’adresse de la variable. Il s’utilise comme ceci :

int *address_of_a = &a;

le int *address_of_a, indique que la variable address_of_a pointe vers (stocke l’adresse de) une variable entière.

Maintenant, notre fonction d’échange correcte serait :

void Swap(int *firstaddress, int *secondaddress)
{
 int tempVal = *firstaddress;
 *firsaddress = *secondaddress;
 *secondaddress = tempVal;
}

Maintenant, les valeurs échangées seraient reflétées dans la fonction principale :

int a = 9,b = 100;
swap(&a,&b);
//print

Vous pouvez toujours déréférencer le pointeur en utilisant *, si vous n’avez pas la variable d’origine. Supposons que si dans une fonction vous n’avez pas la variable d’origine mais que son adresse est dans une variable de pointeur int *x. Nous pouvons simplement accéder à la valeur de l’adresse mémoire sous la forme value = *x ;

Si nous n’avions pas de pointeurs, nous ne pourrions jamais émuler passer par référence dans C, car C est passer par valeur. Mais rappelez-vous que nous ne pouvons que émuler, car même lorsque nous utilisons des pointeurs, les int *firstaddress, int *secondaddress ne sont que des variables de pointeur locales créées, qui ont l’adresse des variables a et b.