void modif2(long *var, long n)
{
*var=n;
}
Le premier paramètre est un pointeur sur une variable de type long. La fonction doit recevoir l’adresse d’une variable
de type long, comme la variable i de l’exemple. Vous devez l’appeler comme ceci :
modif2(&i,20000);
printf("i contient maintenant %d\n",i);
C’est l’adresse de i que vous passez comme premier paramètre de la fonction. Dans la fonction modif2, var va
contenir l’adresse de i, va modifier le contenu de cette adresse en y plaçant la valeur du second paramètre. Au
retour, la valeur de i est donc modifiée.
i contient maintenant 20000
C’est exactement le fonctionnement des sousprogrammes de type procédure du chapitre Les sousprogrammes.
C’est avec les enregistrements de types structurés et surtout les tableaux que les pointeurs montrent toute leur
puissance. Un tableau est une liste d’éléments contigus en mémoire. Si vous récupérez l’adresse du premier élément,
vous pouvez accédez aux n éléments suivants situés aux n adresses suivantes à l’aide d’un pointeur.
Prenez une chaîne "bonjour". Chaque caractère occupe un octet, et en mémoire la chaîne se termine par un caractère
nul. En C, une chaîne de caractères est en fait un tableau de caractères, l’élément d’indice 0 contenant le premier
caractère, l’élément d’indice 1 le second, etc, jusqu’au dernier élément contenant le caractère nul de fin de chaîne.
Placez un pointeur sur le premier élément du tableau. Si vous incrémentez de un le pointeur vous vous déplacez de la
longueur d’un caractère en mémoire, vous vous trouvez sur le second caractère et ainsi de suite.
Note : Ajouter 1 à un pointeur ne déplace pas forcément l’adresse de un octet en mémoire, mais de la longueur
du type du pointeur. Si vous ajoutez 1 à un pointeur de type long, vous ajoutez quatre octets à l’adresse.
À l’aide de ce principe, il devient très simple de calculer la longueur d’une chaîne de caractères en C : tant que la
valeur contenue à l’adresse du pointeur n’est pas nulle, vous incrémentez de 1 le pointeur. Ce qui donne :
char chaine[]="bonjour"; /* un tableau de caractères, une chaîne */
char *p_c; /*un pointeur de type caractère */
int n; /* va contenir le nombre de caractères */
/* le pointeur p_c contient l’adresse du premier élément */
p_c=&chaine[0];
/* tant que *p_c ne contient pas \0 (nul) */
while(*p_c!=’\0’)
{
p_c++; /* on décale d’un char l’adresse */
n++; /* on incrémente le compteur */
}
printf("Longueur: %d\n",n);
La boucle est extrêmement détaillée mais il est possible de faire bien plus court !
for(n=0;*p_c!=’\0’;p_c++) n++;
Note : en C, chaque élément d’un tableau est en fait un pointeur sur l’adresse mémoire contenant cet élément.
Ce qui veut dire que chaine contient l’adresse du premier élément, et que *chaine contient le premier élément,
chaine+1 l’adresse du second élément, et *(chaine+1) son contenu, etc. Aussi p_c=&chaine[0] aurait pu s’écrire
p_c=chaine.
Voyezvous maintenant l’intérêt des pointeurs ? Bien que cette notion soit assez complexe, elle permet de simplifier
fortement les traitements sur les tableaux, les passages et la récupération de valeurs et structures complexes.
3. Notation algorithmique
a. Déclarer et utiliser les pointeurs
- 5 -
© ENI Editions - All rigths reserved - Jonifar lina
167
{
*var=n;
}
Le premier paramètre est un pointeur sur une variable de type long. La fonction doit recevoir l’adresse d’une variable
de type long, comme la variable i de l’exemple. Vous devez l’appeler comme ceci :
modif2(&i,20000);
printf("i contient maintenant %d\n",i);
C’est l’adresse de i que vous passez comme premier paramètre de la fonction. Dans la fonction modif2, var va
contenir l’adresse de i, va modifier le contenu de cette adresse en y plaçant la valeur du second paramètre. Au
retour, la valeur de i est donc modifiée.
i contient maintenant 20000
C’est exactement le fonctionnement des sousprogrammes de type procédure du chapitre Les sousprogrammes.
C’est avec les enregistrements de types structurés et surtout les tableaux que les pointeurs montrent toute leur
puissance. Un tableau est une liste d’éléments contigus en mémoire. Si vous récupérez l’adresse du premier élément,
vous pouvez accédez aux n éléments suivants situés aux n adresses suivantes à l’aide d’un pointeur.
Prenez une chaîne "bonjour". Chaque caractère occupe un octet, et en mémoire la chaîne se termine par un caractère
nul. En C, une chaîne de caractères est en fait un tableau de caractères, l’élément d’indice 0 contenant le premier
caractère, l’élément d’indice 1 le second, etc, jusqu’au dernier élément contenant le caractère nul de fin de chaîne.
Placez un pointeur sur le premier élément du tableau. Si vous incrémentez de un le pointeur vous vous déplacez de la
longueur d’un caractère en mémoire, vous vous trouvez sur le second caractère et ainsi de suite.
Note : Ajouter 1 à un pointeur ne déplace pas forcément l’adresse de un octet en mémoire, mais de la longueur
du type du pointeur. Si vous ajoutez 1 à un pointeur de type long, vous ajoutez quatre octets à l’adresse.
À l’aide de ce principe, il devient très simple de calculer la longueur d’une chaîne de caractères en C : tant que la
valeur contenue à l’adresse du pointeur n’est pas nulle, vous incrémentez de 1 le pointeur. Ce qui donne :
char chaine[]="bonjour"; /* un tableau de caractères, une chaîne */
char *p_c; /*un pointeur de type caractère */
int n; /* va contenir le nombre de caractères */
/* le pointeur p_c contient l’adresse du premier élément */
p_c=&chaine[0];
/* tant que *p_c ne contient pas \0 (nul) */
while(*p_c!=’\0’)
{
p_c++; /* on décale d’un char l’adresse */
n++; /* on incrémente le compteur */
}
printf("Longueur: %d\n",n);
La boucle est extrêmement détaillée mais il est possible de faire bien plus court !
for(n=0;*p_c!=’\0’;p_c++) n++;
Note : en C, chaque élément d’un tableau est en fait un pointeur sur l’adresse mémoire contenant cet élément.
Ce qui veut dire que chaine contient l’adresse du premier élément, et que *chaine contient le premier élément,
chaine+1 l’adresse du second élément, et *(chaine+1) son contenu, etc. Aussi p_c=&chaine[0] aurait pu s’écrire
p_c=chaine.
Voyezvous maintenant l’intérêt des pointeurs ? Bien que cette notion soit assez complexe, elle permet de simplifier
fortement les traitements sur les tableaux, les passages et la récupération de valeurs et structures complexes.
3. Notation algorithmique
a. Déclarer et utiliser les pointeurs
- 5 -
© ENI Editions - All rigths reserved - Jonifar lina
167
