Académique Documents
Professionnel Documents
Culture Documents
Rodrigue DJEUMEN
Sommaire
1 Sommaire
2 Les pointeurs
Variables dynamiques, pointeurs et prise d'adresse
Déclarateur de pointeur et adressage indirect
Opérateurs de pointeurs
Pointeurs et tableaux
Pointeurs et structures
Exercices
3 Les chiers
Dénition
Supports et organisation
Types de supports
Organisation et accès
Opérations sur un chier
Identication du chier
Primitives d'ouverture et de fermeture
Les traitements
Fichier texte
Dénition
Exemple
Fichier binaire
Exercices
Comme pour les tableaux, il n'existe pas de type pointeur. Une variable
pointeur est dénie par un déclarateur de pointeur.
Exemple :
int *p; //déclare une variable p qui pointe sur les objets
int *p[N]; //déclare un tableau de N pointeurs;
int (*p)[N]; //déclare un pointeur sur un tableau;
Le pointeur va servir à faire des indirections, et à obtenir des valeurs par
indirection ; considérons :
int x = 4, y = 5;
int *p = &x;
p est le pointeur d'adresse initialisé à l'adresse
de x
∗p est la variable pointée de p , qui correspond à x
*p = y; //affecte à x la valeur y
Les opérateurs
Un pointeur qui ne pointe sur rien a pour valeur NULL (constante dénie
dans stdio.h) ;
Les aectations entre les pointeurs ayant des objets pointés de même types
sont possibles.
Pointeurs et tableaux
Pointeurs et structures
Soit le type date ci-après :
typedef struct{
short j,m;
int a;
} Date;
et la déclaration d'un pointeur sur cette structure :
Date *d;
L'accès à un champ du pointeur d ce fait par :
(*d).j = 2;
(*d).m = 12;
(*d).a = 2015;
On peut également se servir de l'opérateur − > pour simplier l'écriture et
obtenir le même résultat :
d->j = 2;
d->m = 12;
d->a = 2015;
Rodrigue DJEUMEN Leçon 4 : Pointeurs et chiers 7 / 21
Les pointeurs Exercices
Exercice 1
Soit le programme suivant :
main() {
int A = 1;
int B = 2;
int C = 3;
int *P1, *P2;
P1=&A;
P2=&C;
*P1=(*P2)++;
P1=P2;
P2=&B;
*P1-=*P2;
++*P2;
*P1*=*P2;
A=++*P2**P1;
P1=&A;
*P2=*P1/=*P2;
return 0;
}
Exercice 2
Soit P un pointeur, qui pointe sur un tableau A :
int A[] = {12, 23, 34, 45, 56, 67, 78, 89, 90};
int *P;
P = A;
Quelles valeurs ou adresses fournissent ces expressions :
1 *P+2
2 *(P+2)
3 &P+1
4 &A[4]-3
5 A+3
6 &A[7]-P
7 P+(*P-10)
8 *(P+*(P+8)-A[7])
Notion de chier
Supports
Les supports séquentiels : les informations sont écrites ici les unes à la
suite des autres, et sont telles que l'accès à l'information i nécessite le
passage sur toutes les informations qui précèdent i sur le support. Exemple :
la bande magnétique, le streamer,...
passer par les articles intermédiaires ; cet accès n'est possible qu'avec
les supports adressables.
L'organisation d'un chier, dénit la manière dont les articles du chier
sont disposés sur le support. On distingue trois organisations principales :
Séquentielle qui ne permet que l'accès séquentielle.
Identication du chier
Ouverture de chier
Fermeture de chier
Fichier textes
Un chier de texte est formé d'éléments bien connus : les caractères.
Les caractères contenus dans un chier de texte sont organisés en
lignes, chacune terminée par une marque de n de ligne. Après la
dernière ligne, le chier se termine par une marque de n de chier.
La déclaration d'un chier texte se fait par l'instruction FILE ∗ fich;
Les primitives de lecture sont :
int fgetc(FILE ∗ fich); pour lire un caractère dans le chier,
int fgets(char ∗ ch, int n, FILE ∗ fich); pour lire n caractères sur fich et
les ranger dans ch.
int fscanf (FILE ∗ fich, char ∗ format, ...); pour lire une donnée formatée
dans le chier.
Exemple
#include<stdio.h>
void main(){
int i ;
double tab[2] ;
FILE *chier ;
chier = fopen(essais.txt,r) ;
if (chier != NULL){
for(i=0 ;i<2 ;i++)
fscanf(chier, %lf\n, tab+i) ;
fclose(chier) ;
}
for(i=0 ;i<2 ;i++)
printf(%lf\n, tab[i]) ;
}
Fichier binaire
Les types chier binaire sont structurés, le type de leurs éléments peut
être n'importe lequel (sauf un type chier !).
La déclaration d'un chier binaire se fait par l'instruction FILE ∗ fich;
La primitive de lecture est :
int fread(void ∗ destination, int taille, int nombre, FILE ∗ fich); pour lire
un bloc de données en binaire, pus retourner le nombre d'éléments
eectivement lus.
Exercices
Dans un établissement, un étudiant est caractérisé par son matricule, ses noms et
prénoms, son âge et sa lière. Un ensemble d'étudiants d'un parcours-type
constitue, une classe d'étudiants ; Cette classe d'étudiants peut être implémentée
par un chier.Il vous est demandé de mettre sur pied un programme permettant
de prendre en charge la gestion de la scolarité.
1 Comment représenter les structures de données Etudiant et une classe
d'étudiant ?
2 Écrire une fonction void lireDonnee(...) permettant de lire les données d'un
étudiant ;
3 Écrire une fonction void creerClasse(...); se servant de la fonction
lireDonnee() pour créer à volonté, une classe d'étudiants ;
4 Écrire une fonction void afficherClasse(...) permettant d'acher la liste des
étudiants ;
5 Écrire une fonction int rechercher (...) permettant de rechercher l'existence
d'un étudiant de matricule mat dans la classe.