Enoncé exercice 1

Ecrire un programme C qui utilise la notion de pointeur pour lire deux entiers et calculer leur somme.

Correction exercice 1

Avant de commencer l’exercice il faut s’arrêter un peu sur la notion de pointeur. Un pointeur est une variable qui permet de stocker l’adresse d’une autre variable. C’est à dire l’emplacement de cette dernière au niveau de la mémoire.

Dans cet exercice on aura surtout besoin des pointeurs sur des variables entières sachant que c’est le même principe pour les autres types. Un tel pointeur p sera de type int *. Il sera déclaré alors de la façon suivante : int *p.

Imaginons pour l’instant qu’on veut pour une raison donnée que ce pointeur p pointe sur la variable entière a. Dans ce cas on a qu’à mettre l’adresse de a qui est &a dans p en utilisant l’instruction: p=&a. Et pour accéder à la valeur de la variable a à travers le pointeur p on doit utiliser *p. Ceci est rendu possible grâce au fait que l’adresse de a se trouve dans p.

En revenant à l’exercice, on doit déclarer trois variables entières a, b et s les deux premières pour les entiers pour lesquels l’utilisateur souhaite calculer la somme s, et trois pointeurs pa, pb et ps un pour chaque variable (ligne 6). Puis on mit les adresses des variables a, b et s, avant même de les lire, chacune dans le pointeur correspondant (lignes 7-9).

Après, on lit les variables a et b avec la fonction scanf en passant par les deux pointeurs. Et ceci en remplaçant les adresses &a et &b par leurs équivalents pa et pb (ligne 11). Et pour mettre la somme de ces deux entiers dans la variable s en peut aussi utiliser les pointeurs (ligne 12), cette somme peut être affichée en utilisant soit s ou *ps (ligne 13).

Solution exercice 1
#include<stdio.h>
#include<stdlib.h>
int main()
{
    int a,b,s;
    int *pa,*pb,*ps;
    pa = &a;
    pb = &b;
    ps = &s;
    printf("donnez deux entiers:\n");
    scanf("%d%d",pa,pb);
    *ps = *pa + *pb;
    printf("la somme est %d.\n",s);
    system("pause");
    return 0;
}
Enoncé exercice 2

Ecrire un programme C qui utilise la notion de pointeur pour la permuter le contenu de deux variables de type char.

Correction exercice 2

Dans cet exercice on va exploiter les pointeurs pour permuter le contenu de deux variables de type char. On commencera par la déclaration de ces deux variables (a et b) en plus de deux pointeurs (pa et pb) sur des variables de type char (ligne 5). Ces deux derniers vont recevoir les adresses des deux variables a et b sur lesquelles ils vont pointer (lignes 7-8).

Pour la lecture de a et b, on passe à la fonction scanf les adresses leurs adresse qui sont pa et pb (lignes 10 et 13). Et puisqu’il s’agit ici de deux caractères, il ne faut pas oublier de séparer les deux fonctions scanf par une instruction getchar() afin d’éviter la lecture du retour à la ligne, utilisé pour la validation de a, dans b (ligne 11).

La permutation sera effectuée en utilisant *pa et *pb au lieu de a et b qui est exactement la même chose et en s’appuyant sur la variable auxiliaire tmp de type char. Il est à noter qu’on pouvait n’utiliser que des pointeurs et ceci en remplaçant tmp par *ptmpptmp et un pointeur sur tmp.

Et pour s’assurer de la réussite de la permutation on a affiché les deux variables avant et après la permutation (lignes 14 et 18).

Solution exercice 2
#include<stdio.h>
#include<stdlib.h>
int main()
{
    char a,b,*pa,*pb;
    char tmp;
    pa = &a;
    pb = &b;
    printf("Entrez le premier charactere (a): ");
    scanf("%c",pa);
    getchar();
    printf("Entrez le deuxieme charactere (b): ");
    scanf("%c",pb);
    printf("a = %c et b = %c.\n",a,b);
    tmp = *pa;
    *pa = *pb;
    *pb = tmp;
    printf("a = %c et b = %c.\n",a,b);
    system("pause");
    return 0;
}