Les pointeurs Suite.

Slides:



Advertisements
Présentations similaires
Introduction au Langage C,C++
Advertisements

Programmation Orienté Objet en C++
Rappels C.
Introduction au langage C
Le langage C++ Les types structurés
Les tableaux. Tableau? Erreur de langage ! Un tableau est généralement une liste… Cest donc une liste de mêmes éléments : Liste de notes Liste de noms.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Langages objet Définitions Traduction des méthodes en C++
C.
Paramètres et pointeurs
Structures et unions types énumérés Qu'est-ce qu'une structure
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',
Les attributions de valeur (le signe =). Dans cette présentation, nous allons tenter de représenter ce qui se passe dans la mémoire de lordinateur quand.
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Séances de soutien Projet informatique 2A
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.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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 Abder Alikacem Transtypage Module 1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Une nouvelle structure de données : les tableaux
Sixième cours Les chaînes de caractères et le passage de paramètres par référence Passage de paramètres par référence String.h.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Standard Template Library
C++ : variables Déclaration de variables
IFT-2000: Structures de données Éléments techniques avancés du C et du C++ Dominic Genest, 2009.
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Structures de données IFT-2000
Une introduction à Java
Expression Language Résumé. Variables et beans en attributs  ${nom_Variable} – Recherches successives dans les attributs de page, request, session, application.
Les Types de données complexes
Types de données fondamentaux
Les fichiers texte en C++
Python Fonction et procédure
Stocker plusieurs valeurs de même type dans une variable
CYCLE 1 : Saisir – Afficher – Données Déclarer des Variables dans un programme 1- Rôle de la déclaration de variable 2- Syntaxe de la déclaration de variable.
(Vient du grec et signifie « Peut prendre plusieurs formes »)
Correction TP1 Exercice 4.
Le langage C Rappel Pointeurs & Allocation de mémoire.
CYCLE 1 : Saisir – Afficher – Données Initialiser des Variables par affectation 1- Rôle de l’affectation 2- Syntaxe de l’affectation 3- Exécution de l’affectation.
4 Introduction des objets. Les chaînes et tableaux
9ième Classe (Mardi, 4 novembre) CSI2572. H Nous avons vu comment utiliser les directives #define #ifndef #endif Pour s’assurer de l’inclusion unique.
CYCLE 1 : Saisir – Afficher – Données Saisir des valeurs de variables au clavier 1- Rôle du scanf() 2- Syntaxe du scanf() 3- Exécution du scanf() par le.
Notions de pointeurs en C
Internet WEB.
Algorithmique et programmation Informatique Cours 12 3/12/2001.
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
 Une Formule est:  Une instruction pour calculer un numéro  C’est entre dans la cellule ou vous voulez la réponse  La première chose c’est TOUJOURS.
Cours 61 6 La sécurité, Portée, Visibilité Programmer avec sécurité.
On peut faire des tableaux de calcul On peut faire des graphiques.
1 Septi è me journ é e La programmation impérative.
SIF-1053 Architecture des ordinateurs
Programmation objet La base.
Labo 4 : Les structures et les entrées et sorties
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
ISBN Chapitre 10 L'implémentation des sous- programmes.
B.Shishedjiev - Affectation1 Expressions et affectation Comment produire des nouvelles valeurs.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
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 «
Les bases de l’algorithmique
Philippe Gandy - 15 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Partie 1 Vocabulaire Variable Une variable est une lettre qui représente une valeur inconnue. La lettre choisie est écrite en minuscule. Dans l’expression.
Transcription de la présentation:

Les pointeurs Suite

Pointeurs Un pointeur, c’est une variable dont la valeur est l'adresse d'une cellule de la mémoire Traduction : Imaginons que la mémoire de l’ordinateur, c’est un grand tableau. Un pointeur, c’est alors une variable de type int (un nombre) qui permet de se souvenir d’une case particulière. On comprend bien que le pointeur ne se soucis pas de savoir ce qu’il y a dans la case, mais bien de l’adresse de la case.

Qu’est ce que ça change? Un pointeur est une adresse On sépare le contenu (une valeur) du contenant (une adresse) On a l’adresse de quelque chose, et on peut le partager : Imaginons deux pointeurs a et b pointant sur la 10ème case Imaginons que l’utilisateur modifie (avec un cin par exemple) la 10ème case. a et b peuvent détecter cette modification en allant voir à la 10ème case !

Syntaxe Déclaration : * type *idPtr; Nom de la variable Ce petit signe indique que l’on ne travaille plus sur une variable normale, mais sur un pointeur Le type peut être un type simple (int, float…) ou un objet (n’importe quelle classe).

Syntaxe Opérateur d’adresse : & cout<<&idVar; Nom d’une variable de n’importe quel type Ce petit signe indique que l’on veux récupérer l’adresse d’une variable Plutôt que d’afficher la valeur de la variable, on affiche l’adresse de la case mémoire

Syntaxe Opérateur de déréférencement : * cout<<*ptr; Nom d’un pointeur Ce petit signe indique que l’on veux récupérer la valeur située à une adresse précise Plutôt que d’afficher l’adresse du pointeur, on affiche la valeur qui est dans la case mémoire

Syntaxe Exemple : char c = ‘a’; char *p; p=&c; cout << *p; On déclare une variable normale de type caractère Exemple : char c = ‘a’; char *p; p=&c; cout << *p; On déclare un pointeur sur une case de type caractère On donne l’adresse de la variable c au pointeur p On affiche la valeur de la case pointée par p (‘a’)

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

Mais ce n’est pas tout ! Half life 2 : 4Go de texture, de sons… Windows Vista : 4Go de programmes… Question : 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?

Réponse Vista et Half Life2 ne doivent pas charger tout en mémoire… Uniquement ce qu’il faut Il faut donc prévoir un mécanisme pour charger et décharger des zones en mémoire : new pour réserver une case delete pour supprimer le contenu d’une case

Rappels… Finalement : int i; int *p; i=23; //diff entre i et &i ? 4AC0 4ABF 4ABE Finalement : Tas 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; 23AA 23A9 23A8 6 23A7 23A8 23A6 p BSS 23A6 58 23 i 23A5 F3DE 23A4 0F4D Prog

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

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

Mémoire dynamique Allocation de mémoire dynamique int *tab; tab = new int [10]; Destruction de la mémoire delete [] tab; Avantage : Créer des tableaux de taille défini par l’utilisateur

Il est possible d’utiliser les crochets, comme pour un tableau normal… void afficheToutTableau (int *tab, int taille) { for (int i=0; i<taille; i++) cout<<tab[i]<<endl; } void saisieToutTableau (int *tab, int taille) cin>>tab[i]; int main(void) int *tab; int taille; cin >> taille; tab = new int [taille]; saisieToutTableau(tab, taille); afficheToutTableau(tab, taille); delete []tab; return 0; Il est possible d’utiliser les crochets, comme pour un tableau normal… On ne connait plus par contre le nombre de case !