FLSI602 Génie Informatique et Réseaux

Slides:



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

A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Programmation Orienté Objet en C++
Rappels C.
Formation C débutant. Notion de compilation source.c executable Phase de compilation Fichier de texte brut, inexploitable directement par la machine Fichier.
GEF 243B Programmation informatique appliquée Listes chaînées II §15.1 – 15.2.
GEF 243B Programmation informatique appliquée
GEF 243B Programmation informatique appliquée
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.
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Types de données et représentation
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
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()
Programme de baccalauréat en informatique Algorithmique et programmation IFT-1001 Thierry EUDE Hatem Mahbouli Laboratoire #12 Département dinformatique.
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.
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.
IFT-2000: Structures de données
Structures de données IFT-2000
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.
Les enregistrements (struct) suite. Struct Rappel Enregistrement : Suite de données pouvant être de types différents, accessibles via une seule variable.
Un langage de programmation hybride
8PRO100 Éléments de programmation Les types composés.
Standard Template Library
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é.
Structures de données IFT-2000
Structures de données IFT-10541
C++ : variables Déclaration de variables
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
Plan cours La notion de pointeur et d’adresse mémoire.
L’essentiel du langage C
Stocker plusieurs valeurs de même type dans une variable
Le langage C Structures de 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
Les pointeurs Suite.
La notion de type revisitée en POO
et quelques rappels sur certains éléments du langage C
Les adresses des fonctions
SIF-1053 Architecture des ordinateurs
Argc et argv Utilisation des paramètres de la ligne de commande.
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.
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()
Les chaînes de caractères
Les types composés Les enregistrements.
TABLEAUX des POINTEURS TRAITEMENT DE STRUCTURES
ISBN Chapitre 10 L'implémentation des sous- programmes.
Cours LCS N°4 Présenté par Mr: LALLALI
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
Exercices.
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:

FLSI602 Génie Informatique et Réseaux Alberto Bosio alberto.bosio@lirmm.fr www.lirmm.fr/~bosio/FLSI602

Les pointeurs Définition d’un pointeur Allocation statique Un pointeur est une variable contenant des adresses d’emplacements mémoires On dit d’un pointeur bien initialisé, qu’il pointe sur un emplacement mémoire int *pI1, *pI2; double *pD; Allocation statique Avant toute chose, un pointeur doit être initialisé int X; int *P; P = &X; /* P contient l’adresse de la variable X */ *P = 6; /* Est équivalent à X = 6 */

Allocation dynamique de mémoire La fonction « malloc » permet de réserver un emplacement mémoire Si possible, la fonction malloc retourne l’adresse de l’emplacement réservé Si la mémoire est saturée, la fonction malloc retourne la valeur NULL La fonction « sizeof » retourne la taille de l’espace mémoire occupé par une variable de type donné La fonction « free » permet de libérer un espace mémoire réservé

Exemple #include <stdlib.h> /* On place dans P l’adresse d’un emplacement mémoire pouvant contenir un entier */ int *P; /* déclaration */ P = (int*) malloc (sizeof(int)); /* allocation */ if (P == NULL) printf ( “Memory Allocation Error \n”); else { /* On place l’entier 5 dans l’emplacement pointé par P */ *P = 5; /* On libère l’emplacement pointé par P grâce à la fonction */ free (P); }

Manipulations de base int *P, *Q; /* Déclaration de deux pointeurs */ int X; /* Déclaration d’une variable standard */

Manipulations de base P = &X; /* Allocation statique */ *P = 6;/* Affectation indirecte de X */ printf (“%d” ,X); /* Affiche 6 */

Manipulations de base printf (“%d” ,*P); /* Affiche 7 */ P = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *P = 7; /* Initialisation de l’emplacement pointé par P */ printf (“%d” ,*P); /* Affiche 7 */

Manipulations de base Q = P; /* Copie du contenu d’un pointeur */

Manipulations de base Q = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *Q = *P + 1; /* Initialisation de l’emplacement pointé par Q */ P = NULL; /* Emplacement pointé par P perdu */ free (Q); /* Libération correcte */ Q = NULL; /* Affectation non automatique */

Problème de gestion mémoire int *P, *Q; /* Déclaration de deux pointeurs */ P = (int*) malloc (sizeof (int)); /* Allocation dynamique */ *P = 1; Q = P; /* Copie de pointeur */ *Q = *Q + 2; /* Modification de l’emplacement pointé par P et Q */

Problème de gestion mémoire free (P); /* Libération de l’emplacement*/ P = NULL; /* pointé par P -> et Q DANGER - DANGER - DANGER Q pointe sur un emplacement non réservé*/

Allocation dynamique de tableaux const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i<N; i++) T[i] = 2*i;

Allocation dynamique de tableaux const int N = 4; /* Déclaration statique */ int T[N],i; for(i=0; i<N; i++) T[i] = 2*i; La taille du tableaux doit être constant

Allocation dynamique de tableaux int N; int T[N],i; void main (void) { printf ( "Insert the size : ”); scanf (”%d”,&N); for(i=0; i<N; i++) T[i] = 2*i; }

Allocation dynamique de tableaux int N; int T[N],i; void main (void) { printf ( "Insert the size : ”); scanf (”%d”,&N); for(i=0; i<N; i++) T[i] = 2*i; }

Allocation dynamique de tableaux int N; int *pT; printf ( "Insert the size : ”); scanf (”%d”,&N); pT = (int*) malloc (sizeof (int)*N);

Allocation dynamique de tableaux int N; int *pT; printf ( "Insert the size : ”); scanf (”%d”,&N); pT = (int*) malloc (sizeof (int)*N); Dans ce cas N = 3

Allocation dynamique de tableaux for(i=0; i<N; i++) /* Utilisation du tableau */ pT[i] = T[i] + 1;

Allocation dynamique de tableaux free (pT); /* Libération du tableau */ pT = NULL;

Modes de transmission des arguments Par adresses void echanger(int* pa, int* pb) { int tmp = *pa; *pa = *pb; *pb = tmp; }

Modes de transmission des arguments Transmission de tableaux Toujours par adresses, le nom d’un tableau représentant : son adresse mémoire l’adresse de son premier élément void initialiser(int *pT, int n) { for(int i = 0; i < n; i++) pT[i] = i; } void main() { int x[3]; initialiser(x, 3); /* pT = x = &x[0] */