Vous êtes sur la page 1sur 4

Université de Relizane Année Universitaire 2022/2023

Département d’Informatique Deuxième année

Module : Algorithmiques et Structures de Données

FICHE TP : les pointeurs

Exercice 01

Indiquez les valeurs des différentes variables au terme des différentes instructions :

Exercice 02
Que fait le programme suivant?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a;
int *x,*y;
a=90;
x=&a;
printf("%d contenu de x ", *x);
*x=100;
printf("% d a vaut", a);
y=x;
*y=80;
printf("% d a vaut", a);
return 0;
}

1
Exercice 03
Supposons qu’on écrire une procedure «  Decouper_heure »à laquelle on envoie un nombre
de minutes. Celle-ci renverrait le nombre d'heures et minutes correspondantes :

1. si on envoie 45, la fonction renvoie 0 heure et 45 minutes ;


2. si on envoie 60, la fonction renvoie 1 heure et 0 minutes ;
3. si on envoie 90, la fonction renvoie 1 heure et 30 minutes.

Ecrire cette procédure qui réalise ce travail en utilisant deux pointeurs pointeurHeures,
pointeurMinutes

2
Solution de fiche de TP 02

Exercice 01
Il faut juste ajouter des instructions d’affichage pour les différentes variables (p, q,*p,*q)
A la fin du programme
Exercice 02
Explications
 Dans cet exercice, on définit un entier a et deux pointeurs vers des entiers x et y.
 a est initialisée à la valeur 90.
 Après l'instruction x=&a, x pointe vers a. x contient l'adresse en mémoire où est
 stockée la variable a.
 L'instruction *x=100; modifie le contenu de la variable a et met la valeur 100 dans
 cette variable.
 L'instruction y=x copie le pointeur x dans le pointeur y. Après cette instruction, les
 deux pointeurs x et y pointent vers la même variable a.
 Lorsqu'on écrit *y=80, on modifie alors le contenu de la variable a qui vaut alors 80.
 On voit donc sur cet exemple qu'un pointeur permet de modifier indirectement le
 contenu d'une variable.
Exécution
Lorsqu'on exécute le programme voici ce qu'on obtient à l'écran :
90
a vaut : 100
a vaut : 80

Exercice 03
void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes);

int main(int argc, char *argv[])


{
int heures = 0, minutes = 90;

// On envoie l'adresse de heures et minutes


decoupeMinutes(&heures, &minutes);

// Cette fois, les valeurs ont été modifiées !


printf("%d heures et %d minutes", heures, minutes);

return 0;

3
}

void decoupeMinutes(int* pointeurHeures, int* pointeurMinutes)


{
/* Attention à ne pas oublier de mettre une étoile devant le nom
des pointeurs ! Comme ça, vous pouvez modifier la valeur des variables,
et non leur adresse ! Vous ne voudriez pas diviser des adresses,
n'est-ce pas ? ;o) */
*pointeurHeures = *pointeurMinutes / 60;
*pointeurMinutes = *pointeurMinutes % 60;
}

Vous aimerez peut-être aussi