GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1.

Slides:



Advertisements
Présentations similaires
Un environnement de développement éducatif
Advertisements

Module Systèmes d’exploitation
GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
GEF 243B Programmation informatique appliquée
Premier programme en C :
Portée des variables VBA & Excel
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée Boucles §
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Considération de temps.
GEF 243B Programmation Informatique Appliquée
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Structures §12.3.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
GEF 435 Principes des systèmes d’exploitation
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Modélisation II.
GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Décisions de design avec structures de données §15.1 – 15.2.
GEF 243B Programmation informatique appliquée Flot de contrôle et énoncés de sélection §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Types, variables et constantes.
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée Expressions de type mixte et blocs §
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Fonctions.
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Modules et masquage dinformation.
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Tableaux et pointeurs §10.1.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Objectifs Nous allons concevoir une mise en œuvre contenant un noyau de jeu d’instructions. Nous verrons comment l’architecture de jeu d’instructions.
Cours Présenté par …………..
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
FLSI602 Génie Informatique et Réseaux
8. Les tableaux P. Costamagna – ISEN N1.
ARCHITECTURE GLOBALE CAPTAGE Traitement DES des données GRANDEURS
Récursivité.
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.
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()
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
Quest-ce quune classe dallocation? Une classe dallocation détermine la portée et la durée de vie dun objet ou dune fonction.
Les pointeurs Enormément utilisé en C/C++ ! Pourquoi? A quoi ça sert?
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.
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.
Programmation concurrente
IFT 6800 Atelier en Technologies d’information
COURS DE PROGRAMMATION ORIENTEE OBJET :
Excel (Partie 2).
Méthode et Outils pour la Programmation
Introduction à l’algèbre
Plan cours La notion de pointeur et d’adresse mémoire.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
10 paires -. 9 séries de 3 étuis ( n° 1 à 27 ) 9 positions à jouer 5 tables Réalisé par M..Chardon.
Le langage C Rappel Pointeurs & Allocation de mémoire.
LES PILES ET FILES.
Notions de pointeurs en C
Tutorat en bio-informatique
Cours LCS N°4 Présenté par Mr: LALLALI
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Pointeurs et adresses §9.1

21-Jan-14 2 JGA Beaulieu Revue Quest-ce quun type dérivé? Pourquoi est-ce que les tableaux sont des types dérivés? Quelles sont les trois caractéristiques dun tableau? Que veut-on dire par passer par valeur et par référence?

21-Jan-14 3 JGA Beaulieu Synopsis Adresses: symbolique, logique et physique Lopérateur dadresse - & Pointeurs Opérateur dindirection * Initialisation des pointeurs Travailler avec les pointeurs et les adresses Types de pointeurs

21-Jan-14 4 JGA Beaulieu Adresses Jusquà maintenant nous avons utilisés les variables pour identifier nos données dans nos programmes On assigne un identificateur (un symbole) à nos variables dans une déclaration, et ensuite nous utilisons ce nom pour manipuler les données Le compilateur utilise ces identificateurs pour résoudre la location symbolique dune variable à une adresse

21-Jan-14 5 JGA Beaulieu Adresses Quand nous avons parlé des tableaux et fonctions, nous avons vue que de passer une variable par référence au lieu de par valeur peut être plus efficace Ceci est due au fait que la fonction peut avoir accès à des données extérieurs et de les modifier directement; sauvant le temps de système pour les appels de fonctions Cet accès direct aux variables a beaucoup plus dutilités

21-Jan-14 6 JGA Beaulieu Adresses Adresses…mais les systèmes dexploitation peuvent charger les programmes où ils le veulent dans la mémoire physique. Pour une exécution, la variable a peut être à ladresse physique 01A4:F4A1 et pour la prochaine exécution la même variable peut être à 34BC:4DA1 Même si nous voulons la puissance de nous servir des adresses, nous ne voulons pas perdre la flexibilité que nous donnes les noms symboliques

21-Jan-14 7 JGA Beaulieu Adresses Et bien vous êtes chanceux, C nous permet de nous servir dadresses symboliques en utilisant ce qui sappel un pointeur. Mais avant daller plus loin, nous allons regarder un modèle de mémoire pour visualiser ce que sont ces genres de mémoires

21-Jan-14 8 JGA Beaulieu Adresses – modèle de mémoire #define stuff … void main() { … int a; … } 0000 Symbolique LogiquePhysique 00FF … Compile et link chargement Environment

21-Jan-14 9 JGA Beaulieu Adresses Le modèle que nous venons de voir peut être simplifié si nous comprenons quà partir de notre programme dans le monde symbolique (le code en C) nous pouvons obtenir une adresse durant lexécution dun programme Les adresses symboliques cachent les complications du système dexploitation et du matériel dadressage Pub: si vous prenez le cours de systèmes dexploitation en 4 ème année, vous allez voir la poussière sous le tapis

21-Jan JGA Beaulieu Opérateur dadresse (&) Alors où est-ce que ma variable crèche? En utilisant lopérateur dadresse (&) en avant dune variable dans le code, nous pouvons obtenir sa location en mémoire Si maVariable dans mon programme est un char alors &maVariable est ladresse logique de ce char Il ne faut pas oublier que cest le hardware qui fait la conversion de logique à physique Donc nous avons la capacité dobtenir une adresse; on veut aussi être capable de stocker et manipuler cette adresse

21-Jan JGA Beaulieu Variables pointeurs En C nous avons des variables qui peuvent stocker des adresses dordinateur; ce sont des variables pointeurs ou pointeurs tout court Donc si jutilise lopérateur & et que jobtiens ladresse dune variable, je peux affecter cette adresse à une variable pointeur Un pointeur est déclaré comme suit: int* pointeurAInt; //pointeur à int char* ptrAChar; //pointeur à char

21-Jan JGA Beaulieu Variables pointeurs Notez la similarité dans la façon de déclarer les pointeurs et les tableaux : int* pointeurAInt; int tableauDeInts[]; Donc les pointeurs sont des types dérivés tout comme les tableaux.

21-Jan JGA Beaulieu Variables pointeurs … void main() { … int a = 145; int* p; // un pointeur … p = &a; //prend ladresse de a //et met la dans le ptr p } Symbolique Mémoire a XX p 46798

21-Jan JGA Beaulieu Variables pointeurs … void main() { … int a = 145; int* p; // un pointeur … p = &a; //prend ladresse de a //et met la dans le ptr p } Symbolique Mémoire a p 46798

21-Jan JGA Beaulieu Variables pointeurs … void main() { … int a = 145; int* p; // un pointeur … p = &a; *p = 99; //indirection } Symbolique Mémoire a p *p

21-Jan JGA Beaulieu Variables pointeurs … void main() { … int a = 145; int b = 0; int* p; // un pointeur … p = &a; *p = 99; //indirection b = *p; //b = valeur de la var //pointée par p }//main Symbolique Mémoire a p b

21-Jan JGA Beaulieu Variables pointeurs - init Un pointeur, comme toutes les autres variables en C, na pas dinitialisation automatique Il contient des déchets Une séquence de bits aléatoires Plus que nimporte quelles autres variables, vous devriez toujours initialiser vos pointeurs explicitement Vous pouvez initialiser vos pointeurs avec une adresse réelle: int a; int* p; p = &a;

21-Jan JGA Beaulieu Variables pointeurs - init Ou utiliser le mot NULL (dans stddef.h ) int* p = NULL; Si votre pointeur a une valeur NULL et que vous le déréférencez, vous allez avoir une erreur dexécution ( run-time ) Les pointeurs ambiguës ou qui sont mal initialisés sont une source majeure derreurs en C Une des choses les plus utiles que vous pouvez faire quand vous travailler avec des pointeurs est de dessiner votre logique de pointeurs

21-Jan JGA Beaulieu Pointeurs - Avantages Les pointeurs nous permettent de passer les adresses de variables en paramètres aux fonctions Ils sont à la base de lallocation dynamique de la mémoire en C Nous permettent de grandir ou rapetisser les structures de données si nous ne savons pas avant la compilation la grandeur des données Utilisation efficace de la mémoire – Excellent pour les petits microcontrôleurs Les pointeurs nous permettent la manipulation efficace des données dans les tableaux

21-Jan JGA Beaulieu Travailler avec les pointeurs et les adresses int a = 6; int b = 10; int* p = NULL; int* r = NULL; p = &a; r = p; //pointe à la //même variable b = *r; SymboliqueMémoire a p b r

21-Jan JGA Beaulieu Travailler avec les pointeurs et les adresses int a = 6; int b = 10; int* p = NULL; int* r = NULL; p = &a; r = p; //pointe à la //même variable b = *r; //b = a p = &b; //p pointe //à b *p = 8; //change la //valeur de b SymboliqueMémoire a p b r

21-Jan JGA Beaulieu Pointeurs - flexibilité Touts ces énoncés sont équivalents: int a; int* p = &a; … a = a + 1; a++; *p = *p + 1; (*p)++; //notez les () a = *p + 1;

21-Jan JGA Beaulieu Pointeurs - types Il est important de comprendre quun pointeur na pas seulement un type; mais que le pointeur pointe à une variable qui a un type particulier. Donc un pointeur prend les attributs du type auquel il pointe, en plus de ses attributs de pointeur Ceci est parce que vous pouvez déréférencer un pointeur et appliquer des opérations associées avec le type qui est pointé

21-Jan JGA Beaulieu Pointeurs - types Donc vous ne pouvez pas mêler les types de pointeurs dans les énoncés: int* p = NULL; char* r = NULL; … r = p; //erreur (avertissement) La seule exception à cette règle est le type de pointeur void (prochain cours)

21-Jan JGA Beaulieu Quiz Time int a = 1; int b = 2; int *p = NULL; int *r = NULL; … p = &b; r = &a; *r = *p; //quelles sont les //valeurs de a et b?

21-Jan JGA Beaulieu Devoir int question; int chapitre=9; char livre[]="Forouzan"; void main(void) { for(question=16; question<=20; question++) RépondQuestion(livre, chapitre, question); }