Index des articles > Programmation > Tutorial TIGCC - Chapitre 5 - Les pointeurs

Tutorial TIGCC - Chapitre 5 - Les pointeurs

Article posté par limmt

Chapitre 5 - Les pointeurs

A - Qu'est ce qu'un pointeur?

Vous avez vu que pour une chaîne de caractères nous avaons dû utiliser un pointeur. Un pointeur est en réalité, quelque soit le type, une variable de 4 octets contenant une adresse d'une autre variable. Ce concept peut paraître assez abstrait de prime abord et j'ai mis également du temps à comprendre. Vous avez peut être utilisé l'indirection string (#) par exemple pour enregsitrer une image dans un nom de vraible choisi par l'utilisateur: StoPic #(nomstr).
En C pour faire quelque chose de similaire, on utilise un pointeur.

B - Déclaration

Pour déclarer un pointeur il suffit de faire:

type * nom_var=NULL;

L'étoile permet de sympboliser le pointeur. Il prendra toujours 4 octets en mémoire quel que soit le type.
Il est très conseillé d'assigner toujours la valeur NULL à un pointeur lors de sa déclaration, ce qui permet d'éviter les "pointeurs fous" qui pointent n'importe où et qui peuvent faire des dégats.

C - Opérations sur un pointeur

I) Assignation d'une variable à un pointeur

Il est très facile de faire pointer un pointeur vers une variable.
Pour cela nous utiliserons l'opérateur unaire: &
par exemple:

short *pointeur_vers_un_short=NULL;
short un_short=2;
pointeur_vers_un_short=&un_short;


La dernière ligne de ce code permet de récupérer l'adresse de la variable un_short grace à l'opérateur unaire (&):
&un_short
Puis enregistre cette valeur dans le pointeur:
pointeur_vers_un_short=

II) Récuperer la valeur d'une variable à travers un pointeur

Cette opération est également très simple, il suffit de déférencer le pointeur avec l'opérateur unaire *
Cet opérateur est exactement l'inverse de celui vu au paragraphe I, il permet de récupérer la valeur contenue à l'adresse du pointeur.
Par exemple:

short un_autre_short=*pointeur_vers_un_short;

Cela permet de récupérer la valeur actuelle de un_short et de l'enregistrer dans la variable un_autre_short.

III) Assigner une valeur à une variable à travers un pointeur

Pour cela, il faut également utiliser l'opérateur unaire *
Exemple:

*pointeur_vers_un_short=12;

Après ca, la variable un_short aura la valeur 12 le pointeur pointera toujours vers la varaible et donc *pointeur_vers_un_short vaudra également 12. Cependant la varaible un_autre_short déclarée au paragraphe précédent vaudra toujours 2 car elle est indépendante.

IV) Pointeurs et fonctions

Il est possible de déclarer une fonction renvoyant un pointeur vers quelque chose comme il est possible de passer un pointeur en argument, cela permet le fait que la fonction puisse modifier ses argument car lorsqu'on lui passe une variable normale, cela crée une copie de la vairable et la fonction ne peut modifier que la copie.

D - Cas des chaînes de caractères

I) Intro

Je n'expliquerai pas ici en détail les opérations sur les chaînes de caractères mais juste le principe des chaînes.

Daqns les chapitres précédents, nous avions déclaré les chaînes de caractères comme un pointeur vers un char et nous avions assigné directement une chaîne. En réalité, le compilateur a mi cette chaîne à l'intérieur du programme et le pointeur pointait vers l'adresse dans le programme du premier caractère de la chaîne.
Toute chaîne de caratères sera définie par un pointeur pointant vers son premier caractère et sera terminée par un caractère nul ('\0'). Quand vous écrivez une chaîne entre guillemets, TIGCC ajoute le '\0' à la fin automatiquement.
Pour faire une cahîne de caractère que vous vopulez modifié il est recommandé d'utiliser soit une varaible liste de char et de faire pointer le poiteur sur le premier, soit d'utiliser une allocation dynamique de mémoire.

II) Chaîne de caractères avec liste de char

Il suffit de déclarer une liste de char comme vu aux chapitres précédent et de faire pointer un pointeur vers un char vers nomvar[0].
Pour modifier vous devrez modifier la chaîne octet par octet et faire attention à ne pas oublier le '\0' à la fin.

III) Chaîne de caractères avec allocation dynamique de mémoire

Vous devez déclarer le pointeur, puis le faire pointer sur un espace en RAM alloué dynamiquement, pour cela nous utiliserons la fonction malloc():
char *pchaine=malloc(10);
Cette instuction allouera un espace dynamique en RAM de 10 octets et renverra le pointeur vers cet espace et l'enregistrera dans pchaine. Ceci permet de faire une chaîne de 9 caractères max (9+'\0'=10).
Il faudra utiliser la fonction strcpy pour modifier cette chaîne:
strcpy(pchaine,"chn 9cars");
Copie dans pchaine la chaine "chn 9cars".
Pour plus d'informations, voir le chapitre sur les chaînes de caractères.


Limmt Ribeman © 2004

>> Vos commentaires [0]

Pas de commentaires

Poster un commentaire


Seuls les membres peuvent poster des commentaires