Les pointeurs 1. Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Nécessite de bien connaitre le fonctionnement de.

Slides:



Advertisements
Présentations similaires
Chapitre annexe. Récursivité
Advertisements

Rappels C.
Introduction. Les pointeurs Bête noir des programmeurs Pas daide de Visual Studio Sauf en utilisant les « break point » Pas toujours intuitif Facile de.
Calculs de complexité d'algorithmes
GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.
GEF 243B Programmation informatique appliquée
C.
TP T1 Suivant INTENTIONS PEDAGOGIQUES Ce TP vise à faire analyser et justifier les choix technologiques retenus par le constructeur. Pour la détection.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Les structures de données
Paramètres et pointeurs
Les fonctions en Java Partie I Le type void. Dans cette rapide présentation, je vais expliquer :.à quoi servent les fonctions.à quoi faut-il penser avant.
FLSI602 Génie Informatique et Réseaux
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Système d’exploitation : Assembleur
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
Récursivité.
Gestion des Périphériques
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
8PRO100 Éléments de programmation Allocation dynamique de la mémoire.
Système d’exploitation : Assembleur
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Chapitre VII Généricité. POO-L3 H. Fauconnier2 Chapitre VII 1. Principes généraux 2. Types génériques imbriqués 3. Méthodes génériques 4. Types paramètres.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Langage Oriente Objet Cours 2.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
Quelle est la vitesse d’un solide en rotation ?
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 Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Principes de programmation (suite)
Présentation Structures de Données et TDA
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Chapitre 9 Les sous-programmes.
Types de données abstrait et mécanismes d'encapsulation
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les pointeurs en C. valeur : main () { float valeur; void* pointeur; }
CSI1502 Principes fondamentaux en conception des logiciels
Méthode et Outils pour la Programmation
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Une introduction à Java
Plan cours La notion de pointeur et d’adresse mémoire.
2.1 - Historique Chapitre 2 : Introduction au langage C++
Correction TP1 Exercice 4.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Nouveau programme de TS ORIENTATIONS GENERALES Les enjeux de la terminale. Un enseignement en spirale sur le cycle première-terminale Formation.
Cours 9 Exceptions (fin) Généricité. POO-L3 H. Fauconnier2 Chaînage d'exceptions  Une exception peut être causée par une autre.  il peut être utile.
Tutorat en bio-informatique
La programmation système
CSI 3525, Implémentation des sous-programmes, page 1 Implémentation des sous-programmes L’environnement dans les langages structurés en bloc La structure.
ISBN Chapitre 10 L'implémentation des sous- programmes.
MOCK.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
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 «
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Transcription de la présentation:

Les pointeurs 1

Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Nécessite de bien connaitre le fonctionnement de la mémoire Faire des applications rapides Faire des applications bugées Avoir mal à la tête 2

Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Faire des applications rapides Réserver la mémoire quand on en a besoin Faire des applications bugées Avoir mal à la tête 3

Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Faire des applications rapides Faire des applications bugées Oublier de libérer la mémoire « segmentation fault » Avoir mal à la tête 4

Notion de pointeurs cest Travailler avec les pointeurs cest Se rapprocher du matériel Faire des applications rapides Faire des applications bugées Avoir mal à la tête Des comportements du programme bizarre Des raisonnements très poussés 5

Rassurons nous un peu… compliqué Les pointeurs, cest compliqué En effet, même les plus grands programmateurs font encore ce genre derreurs (Windows, Half-Life…) ch.. Les pointeurs, cest pour nous faire ch.. En effet, on en aura bientôt plus besoin (java, C#...) 6

Mais… pas si Les pointeurs, cest pas si compliqué Avec de la méthode et en prenant du temps, on y arrive (et même facilement) utile Les pointeurs, cest utile Lorsque lon recherche la rapidité (jeux vidéo, programmation Temps réel,…) on est obligé dy passer 7

(Rappels sur ) le matériel mémoire Organisation de la mémoire 8 Programme réel (toto.exe) Comprend le code et les constantes Variables statiques (toutes les variables sauf les pointeurs) Variables dynamiques (les pointeurs) Paramètres des fonctions

Suite des rappels Zoom sur la pile et le tas 9 Augmente quand on appelle une fonction (on empile les paramètres de la fonction et les paramètres locaux (et 2-3 autres trucs)) new Augmente quand on fait appel à linstruction new

Rappels… Finalement : 10 i 4ABF 4AC0 4ABE 23A9 23AA 23A8 p 23A6 23 int i; int *p; i=23; //diff entre i et &i ? p=&i; //diff entre p et *p ? i=58; //valeur de *p ? p=new int; *p=6; 58 F3DE 0F4D 23A7 23A6 23A5 23A4 Prog BSS Tas 23A8 6

Rappels… Exemples de bugs : 11 4ABF 4AC0 4ABE 23A9 23AA 23A8 p int *p; p=new int; *p=6; F3DE 0F4D 23A7 23A6 23A5 23A4 Prog BSS Tas 6 23A9 23A8 23A9

Rappels… Exemples de bugs : 12 4ABF 4AC0 4ABE 23A9 23AA 23A8 p int *p; int *q; p=new int; q=p; *p=6; delete p; cout<<*q; F3DE 0F4D 23A7 23A6 23A5 23A4 Prog BSS Tas 6 23A8 q

De la mémoire sur mesure Half life 2 : 4Go de texture, de sons… Windows Vista : 4Go de programmes… Question : Half Life 2 Windows Vista Comment faire pour jouer à Half Life 2 quand on exécute Windows Vista sur une machine ne disposant que de 1Go de mémoire vive? 13

Réponse Vista et Half Life2 ne doivent pas charger tout en mémoire… Uniquement ce quil faut Conclusion : Vive les pointeurs Vive les pointeurs 14

Utilité du pointeur : On veut charger une map? new… On veut décharger une map ? delete... Doù lexplication du « loading » Succession de new et delete… 15

Utilité du pointeur OK, cest utile… On utilise plus que ça? mais Cest tout a fait possible, mais : Très compliqué à utiliser delete Penser à faire un delete dès que nécessaire new delete 3 instructions pour lutiliser (déclarer, new et delete) Coûteux en terme de place Un entier pour sauver ladresse en mémoire Lobjet en lui même 16

Quand utiliser un pointeur ? gros Quand on utilise un « gros » objet. Quand lobjet contient beaucoup dattributs quand Quand on sait ne sait pas quand on aura besoin de la variable Interaction avec utilisateur, paquets réseau… exercice Quand on fait un exercice sur les pointeurs… 17

Quand utiliser un pointeur ? partout Une fois les bases apprises et acquises, on est tenté den utiliser partout. oublier Danger : oublier de faire un delete ! IMPORTANT IMPORTANT : Implémenter les destructeurs à chaque fois que lon a un attribut de type pointeur ! 18

00A0 00A1 00A2 00A3 00A4 00A5 00A6 00A7 00A8 00A9 00AA 00AB 00AC 00AD 00AE 00AF 00B0 19 Code du programme BSSTas void main(){ node exemple(0); exemple.valeur=0; exemple.suivant=new node(5); node *iter; iter=&exemple; iter=iter->suivant; node *iter2=iter; iter2->suivant=new node(10); iter2=iter2->suivant; iter2->suivant=new node(20); iter2=null; iter=null; delete iter; iter=null; } class node{ int valeur; node *suivant; }

00A0 00A1 00A2 00A3 00A4 00A5 00A6 00A7 00A8 00A9 00AA 00AB 00AC 00AD 00AE 00AF 00B0 20 Code du programme BSSTas void main(){ node *iter=new node(-1); for(int i=0;i<5;i++){ iter->suivant=new node(i); iter=iter->suivant(); }; node *iter1=iter; iter=iter1; for(int i=0;i<5;i++){ cout valeur; iter=iter->suivant(); } class node{ int valeur; node *suivant; }

00A0 00A1 00A2 00A3 00A4 00A5 00A6 00A7 00A8 00A9 00AA 00AB 00AC 00AD 00AE 00AF 00B0 21 Code du programme BSSTas void main(){ node *iter=new node(-1); node *iter1=iter; for(int i=0;i<5;i++){ iter->suivant=new node(i); iter=iter->suivant(); } iter=iter1; while (iter != null) { cout valeur; iter=iter->suivant(); } class node{ int valeur; node *suivant; }