GEF 243B Programmation informatique appliquée

Slides:



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

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 :
Rappels C.
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 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 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.
C.
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',
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
Regrouper des éléments de même type et pouvoir y accéder à laide dun identificateur et dun indice. Objectif des tableaux.
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.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
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.
Points importants de la semaine Les allocations programmées de mémoire. Les enregistrements.
8PRO100 Éléments de programmation Les types composés.
Méthode et Outils pour la Programmation
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Plan cours La notion de pointeur et d’adresse mémoire.
Structures des données
2.1 - Historique Chapitre 2 : Introduction au langage C++
Les pointeurs L'opérateur &.
Le langage C Rappel Pointeurs & Allocation de mémoire.
Ch. PAUL - Piles et Files à l'aide de listes chainées
Les Pointeurs et les Tableaux Statiques et Tableaux Dynamiques
Notions de pointeurs en C
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.
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()
ETNA – 1ème année Guillaume Belmas –
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
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.
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.
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 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.
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.
Informatique 2A Langage C 3 ème séance.
Transcription de la présentation:

GEF 243B Programmation informatique appliquée Pointeurs aux fonctions, allocation dynamique de la mémoire et tableaux de pointeurs §10.4 – 10.5 , Apx I

Revue Répondez dans quelle région de mémoire du programme sont chacune des lignes suivantes: Code, pile, données ou tas: //A program int i = 0; //où? void main (void) { int j = 0; // où? j++; // où? } int Fctn () static int k = 0; // où? int l = 0; // où? l = l + 5; // où? JGA Beaulieu

Synopsis Pointeurs aux fonctions Allocation dynamique de la mémoire malloc() calloc() free() Tableaux de pointeurs JGA Beaulieu

Pointeurs aux fonctions Les fonctions occupent de l’espace de mémoire tout comme les autres entités de code tel que les variables, tableaux, structures… Le nom d’une fonction est un pointeur constant similaire au nom d’un tableau Il est donc possible d’avoir des variables pointeurs qui peuvent pointer à des fonctions Tout comme il est possible d’avoir des variables pointeurs qui pointent aux tableaux Make them remember what an array name refers to. It is an address that is does not change during the execution of a program. JGA Beaulieu

Pointeurs aux fonctions La syntaxe pour la déclaration d’un pointeur à une fonction est différente des autres types de pointeurs On se souvient qu’une variable de pointeur est déclaré avec le type du pointeur, l’étoile * et le nom de la variable pointeur : int* pInt; //un pointeur à un int char* pChar; //un pointeur à un char JGA Beaulieu

Pointeurs aux fonctions La syntaxe de déclaration pour un pointeur à une fonction est similaire à une déclaration de prototype Elle commence avec le type de la fonction (ce que la fonction retourne), Le nom de la variable pointeur à une fonction entre parenthèse (par convention on utilise fp pour commencer le nom) et, Les types des paramètres entre parenthèses: int (*fpInts) (int, int); void (*fpConverti) (char); char* (*fpString) (char* ,char*); Coding standard: Make them notice the function pointer prefix - fp used for pointer to function variables. The first fp fpInts points to a function returning an int and taking two ints as parameters. The second example does not return anything, and takes a char as parameter. It is important that they understand that the brackets are important. Because if the brackets are not around the pointer to function, it would be the same as a function returning a pointer type. JGA Beaulieu

Pointeurs aux fonctions Une des utilisations principales des pointeurs aux fonctions est de passer le nom d’une fonction (son adresse) à un gestionnaire de tâches Le pointeur à une fonction est donc utilisé pour démarrer des tâches dans certains systèmes Une des raisons principales pour utiliser des pointeurs aux fonctions est que le nom d’une fonction tâche peut ne pas être connu avant le temps d’exécution La flexibilité que nous donne les pointeurs aux fonctions est donc un élément clé pour concevoir des systèmes dynamiques Tell them to note the difference between the use of the name function and task. Without going into too many details, tell them that a single function can be stated many times in different tasks. So the same function could be executed N times in parallel. I do not think that we should go into threads in this course. A dynamic system does not have a known set of tasks at startup the tasks are created as we go (we know our functions, but the tasks may change from execution to execution). Unlike our traditional definition of a programs a dynamic system grows to meet certain conditions either in the environment or as a result of a state change in the program. JGA Beaulieu

On peut passer un pointeur à une fonction comme paramètre à une autre fonction: #include <stdio.h> void ExecUnit(void (*fp) (int, int), int, int); void Difference (int a, int b); void main(void) { ExecUnit(Difference, 5,4); getchar(); } void Difference (int a, int b) printf("Difference is: %d", a-b); return; void ExecUnit(void (*fp) (int, int), int c, int d) (*fp)(c,d); Here we have a prototype for the function ExecUnit that will take as parameter a pointer to an int function that takes two ints as parameters) also ExecUnit takes two ints We then have a prototype of a function Difference that returns nothing and take two ints. In main, we pass the address of the function Difference to the ExecUnit. Explain to them that ExecUnit is expecting a pointer to a function that is void and takes two ints as parameters. Here we pass the name of such a function. Show them in ExecUnit how the function is called through a pointer and the passing of two parameters (here two ints) Code as executed #include <stdio.h> void ExecUnit(void (*fp) (int, int),int,int); void Difference (int a, int b); void main(void) { ExecUnit(Difference,5,6); getchar(); } void Difference (int a, int b) printf("Difference is: %d", a-b); return; void ExecUnit(void (*fp) (int, int), int c, int d) (*fp)(c,d);

Allocation dynamique de la mémoire Demander plus de mémoire… Et l’obtenir. JGA Beaulieu

Allocation dynamique de la mémoire SVP monsieur, j’en veux plus Picture of Richard Charles as Oliver Twist JGA Beaulieu

Allocation dynamique de la mémoire Nous avons vue un exemple de malloc quand nous avons appris les pointeurs à void La fonction malloc retourne un bloc de mémoire qui contient le nombre d’octets spécifié par son paramètre. La fonction retourne un pointeur à void pour le premier octet du bloc de mémoire nouvellement alloué La mémoire allouée contient des déchets JGA Beaulieu

Allocation dynamique de la mémoire Le prototype de malloc (tel que définit dans le langage) est montré ici: void* malloc (size_t size); Le typedef size_t est définit dans plusieurs fichiers entête incluant stdio.h et mem.h Il est habituel d’utiliser l’opérateur sizeof() quand on demande de la mémoire: int* pInt = NULL; pInt = (int *)malloc (sizeof(int)); size_t is normally an unsigned int and is large enough to provide the maximum amount of memory in a computer. Forouzan p 489 Make them notice the casting operator in front of the malloc function call because the pointer returned by the malloc function is void. Draw pointer to null and point to block without label. JGA Beaulieu

Allocation dynamique de la mémoire Un appel à malloc demande de la mémoire sur le tas. Si il n’y a pas assez de mémoire sur le tas du programme, vous avez une condition qui s’appelle débordement C’est la responsabilité du programmeur de s’assurer qu’un débordement ne se produit pas, ou de résoudre le problème si cela se produit pInt = (int *)malloc (sizeof(int)) if (pInt == NULL) exit(1); //Pas de mémoire disponible Si on laisse un débordement se produire sans le traiter, on peut obtenir des résultats invalides ou un crash. You also cannot call malloc with a zero size. Usually NULL pointer or application dependant result. JGA Beaulieu

Allocation dynamique de la mémoire calloc est une autre façon de demander de la mémoire. Cette fonction est surtout utilisée pour les tableaux. calloc diffère de malloc de deux façons principales: Elle alloue un bloc contiguë de mémoire capable de contenir tout le tableau. Elle demande que l’on connaisse le nombre des éléments dans le tableau et la grosseur des éléments calloc claire toute la mémoire avec des zéros JGA Beaulieu

Allocation dynamique de la mémoire Vous utilisez calloc comme suit: int* pInt = NULL; if (!pInt = (int*)calloc (200,sizeof(int)))) exit(1); //pas de mémoire sort Cet appel donne de la mémoire pour un tableau de 200 éléments de type int JGA Beaulieu

Allocation dynamique de la mémoire Vous devriez toujours relâcher la mémoire quand vous en avez plus besoin Pour ce faire vous utilisez la fonction free pour relâcher la mémoire dynamique free(pInt);//relâche le bloc de //mémoire pointé par pInt JGA Beaulieu

Allocation dynamique de la mémoire Quand vous utilisez la fonction free, c’est le bloc de mémoire à qui l’on pointe qui est relâché. La variable pointeur existe encore. Le pointeur contient l’adresse du bloc de mémoire même après le free!!! Une erreur commune est d’utiliser un pointeur à un bloc de mémoire après un free. C’est une bonne pratique que de mettre le pointeur à NULL immédiatement après un appel à free JGA Beaulieu

Tableaux de pointeurs Une des structures les plus utiles que nous pouvons construire avec la mémoire dynamique est un tableau de pointeurs Ce genre de structure est utile quand le nombre d’éléments varie de rangée en rangée dans le tableau. Nous pourrions utiliser un tableau de grandeur fixe (2-D) avec la dimension maximum qui est égale à la plus grande rangée, mais cela serait une perte d’espace An array of pointers is also called a ragged array Forouzan p. 492 JGA Beaulieu

Tableaux de pointeurs Vous déclarez un tableau de pointeurs comme suit: int** table; Après la déclaration, vous demandez de la mémoire pour chaque rangée dans le tableau à 2-D. La prochaine diapo provient de votre livre de C Forouzan edition 2 (p.492) JGA Beaulieu

Figure 10-20 from Forouzan.

Quiz Time Quelle est la syntaxe pour déclarer un pointeur à une fonction? Où est-ce que la mémoire est allouée pour les fonctions malloc et calloc? type (*ptr) (parameters types); Heap. Finally mention to them that there is also a realloc to change the size of the allocated memory. But this function is not efficient at all and should be used sparingly. JGA Beaulieu