Notion de pointeurs ALGORITHME ET STRUCTURES DE DONNÉES II LES POINTEURS Une variable qui contient l’adresse d’une autre variable Un pointeur est souvent typé (rarement générique) Il peut se déplacer d’une case mémoire à une autre rapidement Manipulation directe de la mémoire Utilisation de la mémoire dynamique Dr. Jihène Tounsi ISG de Sousse Site web http://www.jihenetounsi.com Email: [email protected] Dans certains langages évolués la notion de pointeur explicite est éliminée (Exp JAVA) Cours développé par Dr. Jihène Tounsi Syntaxe Exemple 1 Déclaration d’un pointeur en lui attribuant le type de données vers lequel il peut pointer Nom_Pointeur:^Type Variables A,B:entier P1,P2: ^entier Assignation d’une adresse ou d’un objet pointé Nom_Pointeur&X Algorithme Exemple; (avec x de même type que P) Accès à la valeur de l’objet pointé Nom_pointeur^ Debut A3 B6 P1&A P2&B P1^P2^ Fin Pointeur Cours développé par Dr. Jihène Tounsi Objet Adresse valeur A 4831836000 6 B 4831836004 6 P1 4831835984 4831836000 P2 4831835992 4831836004 Opérations sur un pointeur Un pointeur stocke une adresse mémoire et il pointe vers un objet de type T Taille du Type (tout dépend du langage) La Taille d’une case est 1 octet (8bits) Un pointeur est de type entier, indépendamment de l’objet vers lequel il pointe. Les opérations à appliquer Addition d’un pointeur avec un entier P2=P1+i avec i un entier P2 aura la valeur de l’adresse de P1 incrémenté de i*(taille(type)) Type Taille minimal en octet Valeurs Entier (court) 1 -127 à 128 Entier (normal) 2 (ordinateur 16bits) 4 (ordinateur 32bits) 16 (ordinateur 64 bits) −2n à +2n 1 Tous les caractères Même logique que l’addition Différence de deux pointeurs ayant le même type P-Q est un entier calculé par la formule : (P-Q)/taille(type) Gestion des pointeurs Création du pointeur Déclaration et assignation d’un type Nom_Pointeur:^type Initialisation (un pointeur non initialisé peut pointer n’importe où) Vers une donnée valide et statique de même type En lui assignant la valeur « Null » En allouant dynamiquement une zone mémoire vers laquelle le pointeur va pointer Exemple 2 Algorithme Exemple; Objet Adresse P1 4831835984 valeur Variables P1: ^entier Debut Nouveau(P1) P1+1 P1^2 (P1+1)^4 Ecrire(P1, P1^, (P1+1), (P1+1)^) Fin Nouveau(nom_pointeur) Destruction du pointeur Caractère Soustraction d’un entier à un pointeur Avec n =nombre des bits -1 Appel de la fonction prédéfinie : Détruire(nom_pointeur) La valeur pointée est détruite P.S: à considérer la machine pour définir la taille d’un entier Pointeur et tableau Créer un tableau dynamiquement Exp: P&tab P va pointer sur l’@ de la première case du tableau P[i] = (p+(i-1))^ = tab[i] Exp : P[2]=(p+1)^= tab[2]=4 P 2 0 Tab 8 Les enregistrements Classiquement Un Enregistrement est une allocation statique d’une adresse mémoire ayant comme taille l’ensemble des octets nécessaires pour tous ses champs …Pour des raisons d’optimisation de la mémoire Nous Demander 4 pouvons déclarer un pointeur sur un enregistrement (Exemple 3) Ou même un champs de l’enregistrement de type pointeur La taille du tableau n’est pas connu à l’avance la taille du tableau au cours du traitement Un pointeur qui va jouer le rôle du tableau Allocation dynamique selon le nombre d’éléments du tableau Initialisation des éléments du tableau Libération de l’espace mémoire en cas de besoin Eviter l’allocation inutile de la mémoire Exemple 3 Algorithme Exp3; Personne=enregistrement nom:chaîne age:entier Fin enregistrement Variable P:^Personne Debut //Allocation dynamique d’une case de type personne Nouveau(P) //Accès au champs un par un P^.nom=« flen » P^.age=23 Ecrire(P^.nom, P^.age) //Libérer la mémoire Détruire (P) Fin. Fin chapitre 1….
© Copyright 2024 ExpyDoc