Article     Discussion     Modifier     Historique     Forums     Salon IRC

Les pointeurs

Un article de Games Creators Network.


Ce mot que les débutants en C redoutent tant. Je vais essayer d'expliquer simplement avec mes supers exemples.

Bon quelques questions :

  • Est-ce vraiment utile ?
Oui, c'est même fondamental et ça permet de gagner un temps précieux.
  • Est-si dur à apprendre ?
Non pas tellement, une fois qu'on a compris le truc on en abuse ;-)

Sommaire

[modifier] Notation

Declaration

Type *variable;

Exemple :

int *i;
 char *txt;
 long *r,*s;

En C++ seulement :

int* a,b (int *a,*b)

[modifier] Utilisation

  • &variable : adresse memoire de variable
  • variable : valeur de variable (comme c'est un pointeur c'est une adresse)
  • *variable : valeur de l'emplacement mémoire qui a pour adresse le contenu dans variable

[modifier] Exemples

Bon, voilà pour la théorie, des exemples valent mieux qu'une longue explication.

Imaginons une bibliothèque avec des gentilles bibliothéquaires toujours là pour un bon renseignement.

Imaginez que vous avez un livre à chercher et que vous demandez à la bibliothéquaire. Ce qui se traduit par :

*livre1 : * étant la bibliothéquaire qui vous redirectionne vers le bon étage et le bon rayonnage où se situe livre1.

Mais comment sait elle que livre1 est là ? Et bien, tout simplement parce qu'on lui a rentré dans sa mémoire ce qui se traduit par :

livre1=&emplacement_livre1

livre1 étant l'endroit où le livre est physiquement présent, donc pour ça on lui a donné l'emplacement physique du livre1. Sachant que "l'emplacement physique" se traduit par &.

&livre1 : Alors ça, qu'est-ce que c'est à votre avis ? Pas trop vite, réflechissez... Je vous laisse encore 2 secondes. Time out ! Et bien, c'est l'emplacement physique où se trouve Martine notre bibliothéquaire. (Assise sur sa chaise derrière son PC).

Imaginez maintenant qu'il y a 2 bibliothéquaires : la première étant Martine et la seconde étant sa collegue Cécile.

Vous avez donc cette notation :

  • **livre1 : la première * (Martine) vous dit d'aller voir Cécile car elle a oublié où c'était. Donc vous allez voir Cécile qui, elle, vous indique où se trouve le livre.
  • *(*(3+livre1)+1) : Dans ce cas, vous êtes toujours à la recherche d'un livre et vous allez voir Martine. Mais elle ne se souvient plus du nom de la nouvelle bibliothéquaire, donc elle dit que c'est la personne à côté de Cécile. Vous allez donc à la rencontre de cette personne, qui vous indique que le livre se situe 3 livres après le livre1. Vous savez donc où prendre votre livre, c'est beau l'administration !

J'espère que grâce à cette petite mise en scène, vous aurez compris le principe des pointeurs. Parallèle entre la notation tableau et la notation pointeur

tableau[45] == *(tableau+45)

En fait, vous utilisez déjà des tableaux sans le savoir ! Utilisation des pointeurs

Reprenons avec des exemples concrets : la principale utilisation des pointeurs est, à part les tableaux, les chaînes de caractères (qui sont des tableaux).

[modifier] Exemple : On veut ajouter 1 à tous les caractères d'une chaîne

char *txt;
 char text[] = "C cool les pointeurs";
 txt = text;     // ou txt=&text[0] => &*(text+0) => &*text => text
 while(*txt != 0)//vérification de la fin de chaine
 { 
   *txt = *txt + 1; // ou (*txt)++ ne pas oublier les parenthèses
   txt++;           // on incrémente l'adresse
 }

Ce qui peut être écrit de cette façon

char *txt;
 char text[] = "C cool les pointeurs";
 for(txt = text; *txt != 0; txt++)
    (*txt)++;

Rappelons la méthode "traditionnelle", sans pointeurs

int i;
 char text[] = "C pas cool quand y a pas de pointeurs";
 for(i = 0; text[i] != 0; i++)
    text[i]++;

Bon, j'espère que l'utilisation des pointeurs sera un peu plus simple pour vous.

A retenir

  • &variable : adresse mémoire de variable
  • variable : valeur de variable (comme c'est un pointeur c'est une adresse)
  • *variable : contenu de l'adresse référencée par variable


Ce document a été publié sur la version 3 du G.C.N. par aetu.

  • Auteur Original : aetu
  • Date de publication : inconnu

 

Rechercher
Installer l'extension de recherche Plus d'informations

 

Comprendre
Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. - Benjamin Franklin

 

Partager
La connaissance est la seule chose qui s'accroit lorsqu'on la partage. - Sacha Boudjema

 

Créer
L'imagination est plus importante que la connaissance. - Albert Einstein

 

 

Le wiki en images Le wiki en images Image du mois: «Snowball: un prototype de jeu développé avec NeL.