Exercice : Introdution

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.

  1. Écrivez une fonction void minimum(int a, int b, int *r) qui renvoie via le pointeur r la plus petite des deux valeurs a et b. 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 par r 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

  2. É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