Exercice : Introdution#
Cet exercice rapide est destiné à vous faire manipuler les pointeurs dans des cas simples afin de comprendre le lien avec les références mais aussi les différences.
Écrivez une fonction
void minimum(int a, int b, int *r)
qui renvoie via le pointeurr
la plus petite des deux valeursa
etb
. N’oubliez pas de bien tester votre fonction.BEGIN SOLUTION
void minimum(int a, int b, int *r) { if (a < b) { *r = a; } else { *r = b; } }
Attention, la version suivante ne fonctionne pas :
void minimum(int a, int b, int *r) { if (a < b) { r = &a; } else { r = &b; } }
En effet, dans l’enregistrement d’activation de la fonction on trouve une case pour chacun des paramètres, dans ce code la case associée à
r
va recevoir l’adresse d’une des deux autres cases. La variable originellement pointée parr
au moment de l’appel ne sera pas modifiée.int main() { int a = 10; int b = 5; int c; int *p = &c; minimum(a, b, p); cout << "minimum:" << *p << endl; return 0; }
END SOLUTION
Écrivez une fonction
int *maximum(int *a, int *b)
qui prend en paramètre deux pointeurs vers des entiers et renvoie le pointeur vers l’entier le plus grand. Testez votre fonction en écrivant une fonction main qui lit deux entiers dans des variables et utilise la fonction maximum pour trouver la plus grande des deux et la doubler.BEGIN SOLUTION
int *maximum(int *a, int *b) { if (*a > *b) { return a; } else { return b; } } int main() { int a, b; cin >> a >> b; int *p = maximum(&a, &b); *p = 2 * *p; cout << "a=" << a << endl; cout << "b=" << b << endl; return 0; }
END SOLUTION