La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.

Présentations similaires


Présentation au sujet: "Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de."— Transcription de la présentation:

1 Exercices sur les pointeurs

2 lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de l’avoir lu. Par exemple pour lire les caractères d’un nombre, tant qu’on a pas vu le premier caractère autre qu’un chiffre, le nombre est incomplet La solution est de dé-lire le dernier caractère : le remettre dans le buffer (en fait, on va utiliser notre propre buffer)

3 lireCar/remettreCar Ces deux fonctions se partagent un tableau (buffer) de char défini comme une variable globale et l’indice du dernier élément de ce tableau int lireCar(void) donne le premier caractère à prendre en compte: il se trouve soit dans le buffer, soit sur l’entrée standard. int remettreCar(char c) met dans le buffer un caractère que l’on veut dé-lire.

4 Correction #define TAILLETAMP 100 char tamp[TAILLETAMP]; int ptamp = 0; int lireCar( void ){ if( ptamp  0 ) return( tamp[--ptamp] ); else return( getchar() ); } void remettreCar( int c ){ if( ptamp  = TAILLETAMP) printf(```remettreCar: trop de caractères \n``); else tamp[ptamp++] = c; }

5 Gestion d’une pile Un allocateur rudimentaire de mémoire. Deux sous programmes, une zone mémoire et un pointeur. –char tampalloue[TAILLEALLOUE]; –char *palloue = tampalloue; emplacement libre suivant –char *allouer(int n); retourne un pointeur p sur n positions consécutives de caractères dans la zone tampalloue –void liberer(char *p); Rudimentaire: libérer dans le sens inverse des allocations (tas)

6 schéma occupélibre Tampalloue: palloué occupé libre Tampalloue: palloué Après alloué

7 Correction char *allouer(int n){ if(tampalloue + TAILLEALLOUE –palloue  =n){ /* il y a assez de place */ palloue += n; return(palloue - n); } else return 0; } void liberer(char *p){ if(p  = tampalloue && p  tampalloue + TAILLEALLOUE) palloue = p; }


Télécharger ppt "Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de."

Présentations similaires


Annonces Google