GEF 243B Programmation informatique appliquée

Slides:



Advertisements
Présentations similaires
GEF 243B Programmation informatique appliquée Listes chaînées I – Tableaux de structures §15.1 – 15.2.
Advertisements

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
Rappels C.
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée Boucles §
GEF 243B Programmation Informatique Appliquée
Hiver 2005Maj JGA Beaulieu & Capt MWP LeSauvage GEF 243B Programmation informatique appliquée Tests.
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 243B Programmation informatique appliquée
GEF 435 Principes des systèmes d’exploitation
GEF 243B Programmation informatique appliquée
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 Pointeurs et adresses §9.1.
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
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.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
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 &
La pile un élément essentiel
C.
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
William Francis Amphithéâtre de lISTIL - CAMPUS DE LA DOUA Travailler Ensemble WIKI et BLOG: Outils Collaboratifs.
Système d’exploitation : Assembleur
Langage C Révision.
ALGORITHMES RECURSIFS
Récursivité.
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()
TRAITEMENT DE STRUCTURES
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 Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Méthode et Outils pour la Programmation
Questions des 4 carrés Prêts ? B A Regardez bien ce diagramme
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
L’essentiel du langage C
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
Structures des données
Le langage C Structures de données
2.1 - Historique Chapitre 2 : Introduction au langage C++
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
SPIP SPIP est le système de publication développé par le minirézo.
LES PILES ET FILES.
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
et quelques rappels sur certains éléments du langage C
Un survol du language C.
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.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
8PRO107 Éléments de programmation Les adresses et les pointeurs.
Exercices sur les pointeurs. lireCar/remettreCar Lorsque l’on lit caractère par caractère, on ne peut pas savoir qu’on a atteint un caractère avant de.
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.
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.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Modèle de mémoire et arithmétique de pointeurs §10.2

Revue Qu’est-ce que le masquage d’information? Dans le langage C, quel fichier est l’interface du module? Pourquoi on l’appel interface? Software engineering concept that says that every module hides a secret from the other modules Header or .h file The functions that are listed in this file are the only ones that are available to outside modules JGA Beaulieu

Review Qu’est que cela va imprimer? #include <stdio.h> EEE243 - 18 Memory Mlodel and Pointer Arithmetic Review Winter 2010 Qu’est que cela va imprimer? #include <stdio.h> void main (void) { int a[5]={22, 4, 61, 8, 2} int* p; int* r; p = &a[2] r = &a[4] if (*p > *r) printf(“Twiddle-dee”); else printf(“Twiddle-dum”); } 7. p points to the address of int 61 8. r points to the address of int 2 9. 61 > 4 is TRUE 10. Twiddle-dee gets printed JGA Beaulieu Sylvain P. Leblanc 3

Synopsis Modèle de mémoire pour un programme en C Arithmétique de Pointeur JGA Beaulieu

Modèle de mémoire Un programme en C a quatre segments principaux: Segment de code (votre programme) Données (static et globales) Le tas (mémoire dynamique) (heap) Pile (segment automatique) (stack) JGA Beaulieu

} Modèle de mémoire Pile Espace vide; la dernière frontière Tas Show them how it grows and shrinks Not all schemes will look like this. The data may be in the middle between the stack & Heap. Perhaps the globals and statics are in separate places. What they need to understand is the general idea. Données Code JGA Beaulieu

Dude… où est ma Var? Memory model JGA Beaulieu

Modèle de mémoire Dude…Où est ma var? int i = 0; void main (void) { int j = 0; } int Fctn () int l = 0; static int k = 0; Stack Heap Data Code JGA Beaulieu

Modèle de mémoire Dude…Où est ma var? Stack Tas Données Code int i = 0; void main (void) { int j = 0; j = j + 5; } int Fctn () int l = 0; static int k = 0; k = k +10; Stack Tas The compiled code goes there Données Code JGA Beaulieu

Modèle de mémoire Dude…Dude…Où est ma var? Pile void main (void) { int *iPtr; … iPtr = (int *)malloc(10 * sizeof(int)); } Tas Données Code Tell them that we will soon see dynamic memory allocation, but for the moment any memory that you ask for is given from the heap, it is there until you free it explicitly or until the program terminates. JGA Beaulieu

Example #include <stdio.h> int myGlobal=0; void main(void) { char localString[]="TEST"; int *pInt; static int i=100; printf("Une adresse de pile : %d\n", localString); printf("Une autre adresse de pile: %d\n", &pInt); printf("Une adresse de texte : %d\n", "Hello"); printf("Adresse de var statique : %d\n", &i); printf("Adresse de var globale : %d\n", &myGlobal); getchar(); } JGA Beaulieu

Arithmétique de pointeur Vous avez déjà vue ou même utilisé au moins une opération d’arithmétique de pointeur int *pInt = NULL; … pInt++; //Bouge mon ptr en avant de un En avant de un, mais un quoi? Bouge de un, mais un mouvement qui est égale au nombre d’octets du type. JGA Beaulieu

Arithmétique de pointeur Les pointeurs ont des types parce qu’ils pointent à un type. Ceci est important quand on fait de l’arithmétique de pointeurs: int tblDeInts[5] = {1,2,3,4,5}; int *pInt = tblDeInts; … pInt++; //Ceci bouge mon pointeur en //avant de deux octets (assuming int is 16 bits) tblDeInts Chaque carré est un octet En mémoire @init Après pInt++ JGA Beaulieu

Arithmétique de pointeur Et: char aOfChars[3] = {'a','b','c','d','e'}; char *pChar = aOfChars; … pChar++; //Ceci bouge le pointeur // de un octet en avant aOfChars Chaque carré est un octet En mémoire @init After pChar++ JGA Beaulieu

Arithmétique de pointeur La même chose va pour tout les autres types de pointeurs! Si on pointe vers la définition de type structure ETUDIANT: ETUDIANT *ptrAEtud = unEtudiantCMR; … ptrAEtud++; //Ceci bouge le pointeur //vers l’avant de //sizeof(ETUDIANT) octets JGA Beaulieu

Arithmétique de pointeur Il y a seulement quelques opérations arithmétiques que vous pouvez faire sur les pointeurs : int *pInt; Unary: ++pInt, --pInt Postfix: pInt++, pInt-- Ajouter un index (un int) à un pointeur: pInt + 5 (avance de 5 positions) Soustraction d’un index: pInt – 5 Soustraction de pointeurs: pInt1 – pInt2 Donne le nombre de positions entre deux pointeurs – utile pour calculer les offsets dans les tableaux (distance entre éléments) They should get that the number of positions here refers to the number of ints in this case or whatever the type may end up to be. Subtracting pointers of different types, even if performed in a cast, would be meaningless and silly! JGA Beaulieu

Arithmétique de pointeur Vous ne pouvez pas additionner, multiplier ou diviser deux pointeurs (il n’y a aucun point à faire cela ): Est-ce que quelque chose de bon pourrait en ressortir? Sans être pointilleux on peut dire que ce ne serait point une bonne idée. JGA Beaulieu

Quiz Time Quelle est la différence entre le tas et la pile pour les programmes? Avec le programme suivant répondez tas ou pile: //Un programme int i = 0; //où? void main (void) { int j = 0; // où? } int Fctn () static int k = 0;// où? int l = 0; // où? The heap is for memory that the programmer requests in the form of the memory allocation requests or by using the static keyword in front of a variable. Variables on the heap are there for the duration of the program or until the programmer asks for the memory to be freed. The stack allocation and reclaiming is automatic. JGA Beaulieu

Quiz Time Dessinez où les pointeurs sont dans le tableau: int tblDeInts[5] = {1,2,3,4,5}; int *pInt = tblDeInts; Int *pInt2 = NULL pInt = pInt + 4; pInt2 = pInt--; tblDeInts[0] = pInt – pInt2; //Qu’y a t-il //à tblDeInts[0]? The last question should result in -1. JGA Beaulieu