TP #10: Pointeurs
Objectifs
Exercices sur les pointeurs

Pointeurs

Quelles sont les valeurs affichées à l’écran par le programme suivant et pourquoi ? ]

int main()
{
   int *p1,*p2,*p3;
   int n,m,k;
   n=21; m=12;
   p1=&m; p2=&n;
   printf("%d %d %d %d",*p1,*p2,m,n);
   p3=p1; p1=p2; p2=p3;
   printf("%d %d %d %d",*p1,*p2,m,n);
   k=*p1; *p1=*p2; *p2=k;
   printf("%d %d %d %d",*p1,*p2,m,n);
   return 0;
}

Exercice simple

Écrire un algorithme conversion_minutes_secondes qui détermine le résultat de la conversion d’un nombre donné d’heures (type entier) en minutes et le résultat de la conversion de ce même nombre d’heures en secondes.

Utillisation avec un tableau

Écrire un algorithme qui prend en paramètre un tableau et qui calcule le min et le max de ce tableau (de façon simultanée).

Segmentation Fault

Dans un fichier C, déclarer un tableau d’entiers de taille 2 initialisé avec des zéros, et imprimer la case 10. Observer que là encore, clang -Wall met des Warnings. Les ignorer et exécuter. Observer les comportements possibles à l’exécution. Même exercice en accédant à une case d’indice 4200.

Pointeur de pointeur

Écrire un programme déclarant une variable entière v et l’initialisant. Déclarer un pointeur pv de type correspondant à cette variable et le faire pointer sur v. Déclarer un autre pointeur $ppv$ de type approprié pour pouvoir pointer sur le pointeur pv. Faire pointer $ppv$ sur $pv$. Modifier la valeur de v indirectement en utilisant le pointeur ppv, puis vérifier en imprimant v.

Logint

Écrire une procédure logint qui prend en paramètre deux entiers n et p, et retourne la plus grande puissance q de p dans n. Elle calcule en outre le coefficient multiplicateur $d$ et le reste $r$ tels que $n=d\times p^q +r$ avec $r < p ^ q$ et $d < p$. $r$ et $d$ seront passés par adresse. Il est interdit d’utiliser la fonction log. On testera à l’aide des égalités $27=1\times 2^4+11$, $98=9\times 10^1 +8$.