Informatique 2A 2009-2010 Langage C 3 ème séance.

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Les fonctions A quoi ça sert ?
Introduction Langage très répandu Noyau Linux VLC … Des avantages indéniables mais aussi des contraintes ! Ceci nest quun rapide tour.
Rappels C.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
1 Bases de donn é es relationnelles. 2 Introduction au mod è le relationnel les donn é es sont repr é sent é es par des tables, sans pr é juger de la.
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
GEF 243B Programmation informatique appliquée
La pile un élément essentiel
C.
Paramètres et pointeurs
Les pointeurs Manipulation d'adresses et de ce qui est contenu dans ces adresses Très important, fondamental même en C mauvaise réputation : 'dur à comprendre',
Fonctions Dans un programme : certaines opérations (ou séquences d'opérations) peuvent se répéter plusieurs fois : affichage de tableau, saisie, ou même.
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
Cours de programmation
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que lon veut allouer. Le premier exemple: #include void main()
Les fichiers binaires en C++
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Structures de données IFT-2000
8PRO100 Éléments de programmation Les types composés.
Standard Template Library
C++ : variables Déclaration de variables
Procédures et fonctions
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
Structures des données
Stocker plusieurs valeurs de même type dans une variable
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
Argc et argv Utilisation des paramètres de la ligne de commande.
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
La fonction alloue un bloc de taille size. Il faut indiquer la taille du bloc que l’on veut allouer. Le premier exemple: #include void main()
ISBN Chapitre 10 L'implémentation des sous- programmes.
8PRO100 Éléments de programmation Les pointeurs de caractères.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Introduction au langage C Structures de données
8PRO107 Éléments de programmation Les adresses et les pointeurs.
PRO-1027 Programmation Scientifique en C
3ième Classe (Mardi, 23 Septembre) CSI2572. O jourd'8: E Allocation de mémoire E Déallocation de mémoire E Tableaux (n dimensions) E Arithmetique des.
Organisation de la mémoire pour le langage minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Variables : notion Une variable permet de stocker/manipuler une donnée dans un programme avec un nom explicite Caractériser par son type (entier, flottant,...)
Développement d’application avec base de données Semaine 3 : Modifications avec Entité Framework Automne 2015.
Étapes pour la Programmation du 68HC11 I. Écriture du programme dans un fichier *.a11 II. Le programme est compilé (traduit en langage machine) III. Le.
Développement d’application avec base de données Semaine 8 : WPF avec Entité Framework Automne 2015.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 6 Support de cours rédigé par Bernard COFFIN Université.
1 ALGORITHMIQUE AVANCEE IUT Vélizy – RT2 FA Laurent Marsan.
Utilisation des composants Guillaume PHILIPPON. Sommaire Fonctionnement des composants Comprendre le fonctionnement d’un composant Les bonnes pratiques.
Informatique 2A Langage C 5ème séance. Déroulement de la séance 5 1 ère partie Étude des chaînes de caractères 2 ème partie Les structures 3.
Chapitre IV Architecture de VonNeumann. I/ Introduction John VonNeumann est un mathématicien d’origine Hongroise qui a participé au projet Manhattan.
Informatique 1A Langage C 6 ème séance 1. Objectifs de la séance 6  Allocation dynamique de mémoire  Application à la création de tableaux 2.
Cours de Langage C Les structures
1 Rappel et compléments de la programmation en langage C.
Présenté par  Samira BELHORMA  Imane ZEHHAF. Introduction I. Définitions II. Quand et comment évaluer une compétence? III. Le contexte d’évaluation.
 a été réalisé et optimisé pour Microsoft Office PowerPoint L’utilisation d’une version inférieure supprime les effets visuels.  correspond aux.
Informatique 2A Langage C 4ème séance
Cours de Langage C Récursivité. Objectifs de la séance 11 Connaître la récursivité. Mesurer un temps d’exécution. 2.
LES TABLEAUX EN JAVA.
Gestion dynamique de la mémoire : new / delete
Principes de programmation (suite)
Révision du format des données
B.Shishedjiev - Informatique
renvoie la moyenne d’un tableau d’entiers
Transcription de la présentation:

Informatique 2A Langage C 3 ème séance

Objectifs de la séance 3 Les pointeurs

Introduction Dans la mémoire de l’ordinateur, les données sont stockées sous forme binaire. B01C … B01F La mémoire est divisée en « cases » de taille 8 bits, appelées octets (bytes en anglais) Chacune de ces cases est repérée par son adresse, qui est un nombre hexadécimal.

Introduction En fait, cette « déclaration de variable » réalise deux opérations : float a; - Définition d’une variable pouvant être utilisée dans le programme pour manipuler des données - Allocation d’un espace mémoire où sera stocké le contenu de la variable. a B01C … B01F

Problématique Transmission d’une variable par valeur : float a,b; a=5;b=a; fonc(a); À chaque fois, on copie la valeur d’une variable dans une autre. En particulier, une fonction ne peut pas modifier la valeur d’une variable passée en argument float a; a=5; … fonc(a); printf(«%f\n»,a); fonc(float a) {… a=0; … } On affiche « 5 » ! C’est parce qu’une fonction travaille toujours sur une « copie » des variables, qui sont stockées à une autre adresse.

Les pointeurs Solution : - Transmettre à la fonction l’adresse de la variable plutôt que sa valeur Un pointeur est une variable qui contient l’adresse d’une autre variable. Pour avoir accès à l’adresse d’une variable existante : opérateur & float n; Déclaration d’un pointeur : - Pour manipuler cette adresse, on a donc besoin de définir une variable la contenant : quel est son type ? float *p; p est un « pointeur sur un float » C’est l’adresse de la première case mémoire contenant la donnée &n : représente l’adresse de la variable n Pour avoir accès à la valeur de la variable pointée par p : opérateur * *p représente le contenu de la variable pointée par p

Exemple int n; int *p; … n=5; printf(«%d\n »,n); p=&n; printf(«%d\n »,*p); *p=1; printf(«%d\n »,n); printf(«%d\n »,*p); printf(«%x %x\n »,p,&n); printf(«%x %x\n »,p+1,&n+2 ); 5 5 *p désigne le contenu de la case mémoire pointée par p 1 1 BC01 BC01 (adresse en hexa) BC05 BC09

main( ) { double n; double *p; n=5; printf(«%lf\n»,n); p=&n; printf(«%lf\n»,*p); *p=1; printf(«%lf\n»,n); printf(«%lf\n»,*p); printf(«%x %x\n»,p,&n); printf(«%x %x\n»,p+1,&n+2 );}

Tableaux et pointeurs Autre exemple : déclaration d’un tableau : - Définition d’une variable pouvant être utilisée dans le programme pour manipuler des données - Allocation d’un espace mémoire de 100 cases contigües de 4 octets int tab[100]; En fait, un tableau n’est rien d’autre qu’un pointeur ! int tab[100]; for(i=0;i<n;i++) tab[i]=i; printf(«%d\n »,tab[0]); printf(«%d\n »,*tab); printf(«%d %d\n »,*(tab+1),tab[1]); printf(«%x %x\n»,tab,tab+1); La variable tab est un pointeur qui contient l’adresse de la première donnée contenue dans le tableau AB08 AB0C

Tableaux et pointeurs Avantage : on n’a pas à se préoccuper de l’allocation de mémoire. Inconvénient : on doit connaître la dimension de la variable (nombre d’octets) au moment où on la déclare. Conséquence : on doit connaître la taille d’un tableau à la compilation du programme int n; int tab[n]; … n=100; for(i=1;i<n;i++) tab[i]=0; Autre exemple : déclaration d’un tableau : - Définition d’une variable pouvant être utilisée dans le programme pour manipuler des données - Allocation d’un espace mémoire de 100 cases contigües de 4 octets int tab[100];

Allocation dynamique Solution : - Déclarer une variable contenant une adresse (pointeur) - Allouer l’espace mémoire correspondant à la variable (donc à son adresse) de manière dynamique #include... int dim; int *tab;... dim = 100; tab=malloc(dim*sizeof(int)); for(i=0;i<dim;i++) tab[i]=0; - Fonction d’allocation : malloc(nb octets) - sizeof(type) : retourne le nombre d’octets d’une variable

#include... int dim; int *tab;... dim=100; tab=malloc(dim*sizeof(int)); for(i=0;i<n;i++) tab[i]=0; Allocation dynamique Intérêt : la dimension d’un tableau n’a pas besoin d’être connue pour déclarer la variable qui permet de la manipuler - Il faut aussi libérer l’espace alloué après utilisation : La fonction est: Mais : avant d’utiliser un tableau, il faut absolument allouer son espace mémoire ! … free(tab); free (pointeur) Mais en général, le programme « plante » ici ! Pas de problème à la compilation

#include... int dim; int *tab;... dim=100; tab=malloc(dim*sizeof(int)); for(i=0;i<n;i++) tab[i]=0; Allocation dynamique Intérêt : la dimension d’un tableau n’a pas besoin d’être connue pour déclarer la variable qui permet de la manipuler - Il faut aussi libérer l’espace alloué après utilisation : La fonction est: Mais : avant d’utiliser un tableau, il faut absolument allouer son espace mémoire ! … free(tab); free (pointeur)

Opérations sur les pointeurs - L’opérateur + permet de se déplacer dans la mémoire à partir de l’adresse contenue dans le pointeur. Si p pointe sur une donnée de taille T, p+5 pointe sur la case mémoire située 5T cases plus loin int *tab; tab=malloc(100*sizeof(int)); for (i=0;i<100;i++) *(tab+i)=3*i; printf(«%d,%d,%d\n»,*tab,*(tab+1),*(tab+99)); Autre écriture possible printf(«%d,%d,%d\n»,tab[0],tab[1],tab[99]);

Autres opérations - L’opérateur - permet d’aller dans l’autre sens. - Les opérateurs ++ et -- permettent d’incrémenter et de décrémenter un pointeur. Pointeur NULL : par convention, il pointe sur l’adresse #0000 float *p; p = NULL; Exemple : la fonction malloc renvoie un pointeur sur l’espace mémoire alloué, si l’allocation a pu se faire le pointeur NULL si l’allocation n’a pas pu se faire if (malloc(dim*sizeof(float))!=NULL) for(i=0;i<n;i++) tab[i]=0; else printf(« Allocation impossible\n »);