IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

[LG]adresse de pointeur


Sujet :

Langage Pascal

  1. #1
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut [LG]adresse de pointeur
    Bonjour,

    voila, en C, je peut calculer un offset entre 2 pointeurs en les soustrayant l'un a l'autre.
    Je voudrais savoir s'il est possible de faire la meme chose en pascal.
    je dois afficher les membres d'une liste chainee double d'un ptr1 à un ptr2.
    je voudrais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    diff:=ptr2-ptr1;
    if 
    diff>0 then [ptr2 est apres ptr1]
    else
    [ptr2 est avant ptr1]
    je peut alors afficher les membres de la liste en partant du premier rencontré jusqu'au suivant.
    Merci

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Euh oui ta méthode est peut-être valable, mais elle n'est certainement pas très propre
    Pour répondre à ta question, un pointeur est un entier sur 32 bits non signé (un DWord), donc on peut y faire toutes les opérations comme sur des entiers (addition, soustraction). Pour Turbo Pascal, il faut d'abord convertir en longint, ou mettre la valeur dans EAX en assembleur, avant de faire toute opération...
    Cependant, pour les listes chaînées, si tu l'as bien construiste, tu devrais avoir un moyen simple d'accéder à l'élément suivant (en général, un pointeur vers l'élément suivant). Si ce n'est pas le cas, tu devrais consulter un tutoriel sur le sujet !

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 415
    Points
    59 415
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Ta méthode par soustraction d'adresses est dangereuse : la fragmentation du tas peut très bien entraîner que les éléments successifs de la liste chaînée aient des adresses très différentes.

    Personnellement, j'oublierais cette idée pour me rabattre sur celle de Wormful_Sickfoot.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    ok je vois (enfin je crois)
    mais dans mon cas, je veut juste savoir lequel est en premier dans la chaine.
    la chaine est bien placée en memoire de facon sequentiel ou je me trompe ?
    donc si l'adresse de 1 est > a l'adresse de 2, alors 1 se situe apres 2 dans la chaine, arretez moi si je me trompe....

  5. #5
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Ben les cellules ne sont pas toujours placées à la suite les unes des autres (comme l'expliquait Alcatîz), donc tu peux te retrouver avec des adresses n'ayant aucun rapport les unes avec les autres.
    Puis honnetement, si on a inventé les pointeurs, c'est justement pour ne pas se prendre la tête avec ce genre de problèmes
    Pour les listes chaînées, tu devrais consulter un tutoriel, car normalement on dispose d'un pointeur sur la liste (sur la première cellule en fait). Et dans chaque cellule, il y a un pointeur vers la cellule suivante, ce qui permet de parcourir la liste simplement, en passant de pointeur à pointeur...
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  6. #6
    Membre du Club
    Inscrit en
    Février 2003
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 130
    Points : 66
    Points
    66
    Par défaut
    merci je vais essaye autrement alors.
    et au fait, ce n'est pas un probleme de comprehension de liste chainée, heuu je crois que j'ai compris.
    je viens de terminer un reseau ferroviere (basique certes je vous l'accorde), avec liste chainée double dans tout les sens et sa fonctionne.
    Mais comme d'habitude, merci a vous, ca fait plaisir de trouver de l'aide comme ca, surtout pour un vieux etudiant de 30 piges.

    Merci et a+

  7. #7
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 464
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Tu es le bienvenu sur le site, n'hésites pas à revenir, car c'est agréable de dialoguer avec quelqu'un comme toi

    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  8. #8
    Membre expérimenté
    Avatar de Juju_41
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2003
    Messages
    974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Février 2003
    Messages : 974
    Points : 1 557
    Points
    1 557
    Par défaut
    Petite précision, il est parfois utile d'avoir un pointeur sous forme de scalaire (pour incrémenter le pointeur d'un octet par exemple). On peut alors les déclarer comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      pp: pointer;
      ip: longint absolute pp;
    De cette manière en faisant
    On incrémentera d'un octet le pointeur pp. Il faut bien sûr faire attention à ne pas sortir d'un segment.

    Il y a aussi cette déclaration que j'aime bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type
      TPointer = record
                   p: pointer;
                   abs: longint absolute p;
                 end;
    Avant de poster, merci de consulter les règles du forum

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 31/10/2009, 11h38
  2. forcer une adresse de pointeur
    Par kurvanov dans le forum Débuter
    Réponses: 4
    Dernier message: 28/04/2009, 09h22
  3. Réponses: 12
    Dernier message: 26/01/2008, 20h23
  4. [vecteur] adresse et pointeur
    Par ZaaN dans le forum C++
    Réponses: 1
    Dernier message: 28/03/2007, 15h15
  5. [info] taille des adresses des pointeurs Java
    Par TabrisLeFol dans le forum Général Java
    Réponses: 11
    Dernier message: 14/02/2006, 13h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo