Beruflich Dokumente
Kultur Dokumente
Dpartement IRIS
http://www.diderot.org
Exos Langage C
Les pointeurs
Exercices sur les pointeurs
Auteur
G.VALET
Version - Date
Version 1.3 - Nov 2010
Nom du fichier
exo-langageC-pointeurs.docx
Quelques exercices sur les pointeurs. Pour effectuer correctement ces exercices, se rfrer au "cours de
programmation en C de M. LEBRET" et notamment la partie sur les "pointeurs", les "structures" et les
"fonctions"
A. Sommaire
A. SOMMAIRE.................................................................................................................................................................................. 2
B. PRESENTATION DES POINTEURS ....................................................................................................................................................... 3
B.1. Dfinition ......................................................................................................................................................................... 3
B.2. Utilisation......................................................................................................................................................................... 3
B.3. Arithmtique des pointeurs ............................................................................................................................................. 4
C. QUELQUES QUESTIONS .................................................................................................................................................................. 5
D. ENONCE DES EXERCICES ................................................................................................................................................................. 6
D.1. Dclaration et utilisation ................................................................................................................................................. 6
D.2. Afficher une chane de caractres ................................................................................................................................... 6
D.3. Passage par adresse ........................................................................................................................................................ 6
D.4. Traitement de chaine....................................................................................................................................................... 7
D.5. Calculer la taille dune chane .......................................................................................................................................... 7
D.6. Conversion binaire-dcimal ............................................................................................................................................. 8
a. Objectif................................................................................................................................................................................................8
b. Algorithme ..........................................................................................................................................................................................8
c. Poids fort .............................................................................................................................................................................................8
d. Vrification dusage ............................................................................................................................................................................9
e. Mise en uvre ....................................................................................................................................................................................9
2/9
char * p1;
p1 pointe sur le
caractre a stock
en mmoire
a
b
c
Mmoire
Une variable pointeur est dclare en utilisant le caractre * devant le nom de la variable. Cette
notation permet de distinguer les variables relles des pointeurs.
Prcisons galement quun pointeur pointe sur une donne en mmoire et que cette donne peut
tre code sur plusieurs emplacements mmoire. Dans ce cas, le pointeur pointe sur le premier
emplacement de la donne :
short int * p2;
p2 pointe sur
le 1er octet dun
entier court
01
4F
c
Mmoire
B.2. Utilisation
Pour dclarer un pointeur, il suffit dutiliser la syntaxe suivante :
int *i ;
Il est possible de manipuler les pointeurs de telle manire quils pointent sur un emplacement dj
occup par une variable :
char c =a ;
char *p1 = &c ;
3/9
char * p1 = &c;
char c = a;
p1 pointe sur le
caractre a stock
en mmoire
Mmoire
Mmoire
float tab[4];
13.45
4.56
p1+1;
1.2
67.4
p1+2;
p1+3;
4/9
C. Quelques questions
Voici quelques questions en relation avec les pointeurs et les structures.
Question 1. Dcrivez dans un tableau, les diffrents types de donnes numriques et alphanumriques
en prcisant lintervalle de nombres et loccupation mmoire.
Question 2. Le programme suivant manipule 2 pointeurs de types diffrents. Lun sur le type
unsigned int et lautre sur un char . Les 2 pointeurs vont pointer la mme adresse en mmoire.
Quel sera le contenu de p2 affich ? Expliquez ce rsultat
#include <stdio.h>
int main() {
unsigned int entier = 134486;
char *p;
p=&entier;
// p pointe sur entier
printf("Contenu de p =%c\n",*p);
return 0;
}
5/9
}
int main() {
char *chaine = "bonjour
afficher(chaine);
return 0;
}
les
amis";
Compltez la boucle while de la fonction afficher pour quelle affiche tous les caractres de la chane
SANS les espaces (Rappel : le caractre \0 est le caractre de fin de chaine en C).
6/9
Compltez la fonction scase en utilisant les 2 pointeurs passs en paramtres de la fonction. Noubliez
pas que, daprs la table ASCII, les majuscules et les minuscules sont spars de 32 caractres :
char c1 = A ;
char c1bis = a ;
char c2 = c1 + 32 ;
// c2 contient a
*s)
i;
len = 0;
(i=0; s[i]!=0; i++) {
len++;
}
return len;
}
En fait comme s est un pointeur, on peut s'en servir pour parcourir la chane plutt que d'utiliser une
variable supplmentaire i. Il suffit pour cela de l'incrmenter pour le faire pointer successivement vers les
diffrents caractres de la chane.
7/9
btod
b. Algorithme
Acquisition
chaine
Dfinir le poids de
dpart
Poids = 0 ?
non
non
Bit 1 ?
oui
resultat = resultat +
poids
Dcalage
droite dun bit
de poids
Afficher
resultat
c. Poids fort
A chaque caractre de la chane dentre, correspond un poids. Il faut donc connatre la taille de la chane
pour connatre le poids du 1er caractre.
8/9
Trouvez une relation entre la taille de la chane et le poids fort du nombre traduire.
d. Vrification dusage
Nous devons vrifier quil y a bien 1 paramtre pass en argument. On utilise la variable argc et
argv qui contiennent respectivement le nombre de paramtres et les valeurs de ces paramtres sous
forme dun tableau de pointeur sur des chanes :
int main(int argc, char *argv[]) {
if (argc<2) {
printf("Usage : %s chiffre_binaire\n", argv[0]);
exit(1);
}
Le 1er argument du tableau argv contient le nom du programme et non le 1er paramtre pass au
programme.
e. Mise en uvre
Ecrivez le programme et testez son bon fonctionnement.
9/9