Langage C/Pointeurs

Une page de Wikiversité.
Aller à : navigation, rechercher
Début de la boite de navigation du chapitre
Pointeurs
Icône de la faculté
Chapitre no11
Leçon : Langage C
Chap. préc. : Préprocesseur
Chap. suiv. : Tableaux
fin de la boite de navigation du chapitre
Icon falscher Titel.svg
En raison de limitations techniques, la typographie souhaitable du titre, « Langage C : Pointeurs
Langage C/Pointeurs
 », n'a pu être restituée correctement ci-dessus.

Introduction[modifier | modifier le wikitexte]

Un pointeur est une variable, qui au lieu de posséder une valeur "classique", contient l'adresse en mémoire d'une autre variable. On dit qu'il pointe sur cette variable. Un pointeur est reconnaissable par le symbole '*'.

Illustration:[modifier | modifier le wikitexte]

int *ptr;
int x=10;
ptr=&x;

On dit que ptr pointe sur x, il contient donc l'adresse en mémoire de la variable x. Il y a maintenant deux façon d'accéder à x, une façon direct et une autre indirect.

Accès direct et indirect à une variable:[modifier | modifier le wikitexte]

printf("accès direct sur la valeur de x: %d \n", x);
printf("accès indirect sur la valeur de x: %d \n", *ptr);
printf("accès direct sur l'adresse de x: %d \n", &x);
printf("accès indirect sur l'adresse de x: %d \n", ptr);

Il faut bien comprendre que l'accès direct comme indirect agit sur la variable x. C'est-à-dire que l'on modifie réellement la valeur de x dans les deux cas.

Pointeurs et tableaux[modifier | modifier le wikitexte]

Tableau simple[modifier | modifier le wikitexte]

int *ptr;
int tab[10];
ptr=tab;

Pour un tableau, il n'y a pas besoin de recourir au caractère '&' car tab sans indice prend la valeur de l'adresse en mémoire du premier élément du tableau tab.

Accès au différents éléments d'un tableau[modifier | modifier le wikitexte]
for(x=0; x<10; x++)
 *(ptr+x)= 0; // revient à dire "tab[x]=0"

Tableau deux dimensions[modifier | modifier le wikitexte]

int *ptr;
int tab[2][6];
ptr=&tab[0][0];

Le tableau à deux dimensions sera ainsi "déroulé" et ramené à un tableau simple. L'accès aux différents éléments du tableau se fait donc comme pour un tableau simple.

Pointeur et structure[modifier | modifier le wikitexte]

Définissons une structure pour ensuite l'utiliser dans les différents exemples:

typedef struct coord Coord;
struct coord{
 int x;
 int y;
 char nom_point;
}pointsA;

Il suffit ensuite de déclarer un pointeur de type struct nom_de_la_structure et de le faire pointer sur pointsA.

Coord *ptr;
ptr=pointsA;

Accès aux éléments d'une structure[modifier | modifier le wikitexte]

printf("Accès direct à x= %d \n", pointsA.x);
printf("Accès indirect à x= %d \n", ptr->x);

printf("Accès direct à y= %d \n", pointsA.x);
printf("Accès indirect à y= %d \n", ptr->y);

Comme on peut le constater, le '.' est remplacé par une flèche '->' lorsqu'on manipule les éléments d'une structure avec un pointeur. Il existe une autre méthode pour y accèder qui se rapproche plus de ce qui a été vu plus haut:

printf("Autre accès indirect à x=%d \n", ((*ptr).x));
printf("Autre accès indirect à nom_point=%c \n", ((*ptr).nom_point));

Conclusion[modifier | modifier le wikitexte]

Un pointeur doit en règle général toujours être du même type que la variable sur laquelle il va pointer. On accède à son adresse de la même façon que pour une variable classique.



Langage C
bouton image vers le chapitre précédent Préprocesseur