Pointeurs dans le programme en C

Fermé
lili - 1 juin 2020 à 11:33
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 10 juin 2020 à 11:14
Bonjour,

J'aimerai savoir ce que c'est qu'un pointeur s'il vous plaie.

2 réponses

yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 1 juin 2020 à 12:23
bonjour,
suggestion
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
10 juin 2020 à 11:14
Bonjour lili,

Essentiellement, un pointeur en C est une variable, qui permet de stocker une adresse mémoire.

int a = 10;
int * b;

b = &a;
/* b contient maintenant l'adresse mémoire de la variable a */


Une variable pointeur permet d'accéder indirectement au contenu vers lequel l'adresse qu'elle contient pointe. De ce fait, les pointeurs sont typés. Dans l'exemple ci-dessus,
b
est déclaré comme une variable pointeur sur des données de type
int
.

printf("Le contenu de a est : \n", *b);


Une autre utilisation commune des pointeurs est dans le cadre de l'allocation dynamique de mémoire avec
malloc()
. La variable pointeur permet de stocker l'adresse de la zone mémoire réservée par
malloc()
, d'accéder indirectement à son contenu, et de conserver cette adresse mémoire pour la fournir à
free()
lorsqu'on voudra la libérer.

#include <stdio.h>
#include <stdlib.h>

int main (void) {
    int * dix_entiers;

    dix_entiers = malloc (sizeof(int) * 10);
    if (dix_entiers == NULL) {
        /* gérer l'erreur */
    } else {
        for (int i = 0; i < 10; i++)
            dix_entiers[i] = i;
        printf("le 3ème élément est : %d\n", dix_entiers[2]);
        printf("le 3ème élément est : %d\n", *(dix_entiers + 2));
        free (dix_entiers);
    }
    
    return 0;
}


Dans l'exemple ci-dessus
*(dix_entiers + 2)
illustre une autre utilisation des pointeurs qui est l'arithmétique de pointeurs. Cette expression signifie le contenu (de type
int
) présent à l'adresse mémoire égale à celle contenue dans la variable
dix_entiers
et à laquelle on ajoute de 2 fois la taille d'un
int
.

Il y a d'autres finesses, mais ce sont les caractéristiques essentielles.

Dal
0