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

Ada Discussion :

Besoin d'aide sur les pointeurs


Sujet :

Ada

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut Besoin d'aide sur les pointeurs
    Bonjour j'ai vu un exercice sur les pointeurs que je ne comprends pas trop d'abord le voici :
    Code ADA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    with Text_Io; use Text_Io;
    with Ada.Integer_Text_Io; use Ada.Integer_Text_Io;
    procedure Tab_Ptr_2 is
       type Ptr is access Integer;
       type T_Tab is array(1..3) of Ptr;
       T1: T_Tab;
       T2: T_Tab;
       P: Ptr;
    begin
       for I in T1'Range loop
          T1(I):=new Integer'(0);
       end loop;
       T1(3).all:=5;
       P:= new Integer'(0);
       for I in T2'Range loop
          T2(I):= P;
       end loop;
       T2(3).all:=5;
           --  moment cle
       Put("T1(1).all vaut ");
       Put(T1(1).all);
       New_Line;
       Put("T2(1).all vaut ");
       Put (T2 (1).all);
       new_line;
       put("p.all = ");
       put(p.all,1);
       New_Line;
       skip_line;
    end Tab_Ptr_2;

    Ce que je ne comprend pas ce trouve ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for I in T1'Range loop
       T1(I):=new Integer'(0);
    end loop;
    T1(3).all:=5;
    donc là j'ai T1(1)=0; T1(2)=0; T1(3)=5;
    et ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    P:= new Integer'(0);
    for I in T2'Range loop
       T2(I):= P;
    end loop;
    T2(3).all:=5;
    j'ai chaque cellule de T2 qui est pointé par P mais quelle est la valeur de ces cellules ? perso je pense que c'est T2(1)=0; T2(2)=0; T2(3)=5; mais en regardant la correction je vois que c'est 5 la valeur donc ma question comment ca ce fait pouvez-vous m'expliquer la nuance entre les 2.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 114
    Points : 139
    Points
    139
    Par défaut
    Bonjour,

    Dans le premier cas, tu crées 3 cases (instruction new) dans lequel tu mets 0 par défaut. Puis tu mets 5 dans la 3ème.

    Dans le deuxième cas, tu crées une case (P) dans laquelle tu mets 0. Puis, tu stockes l'adresse de cette case dans 3 endroits différents (affectation au T2(I)) , puis tu changes le contenu de cette case (via T2(3).all ) en l'affectant à 5.

    Voilà j'espère que tu as saisi la différence.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    Alors comment se fait-il que les autre case de T2 ne valent pas 5 (je me doute que ses à cause de P mais je ne saisi pas comment) ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 114
    Points : 139
    Points
    139
    Par défaut
    Et bien si, tous les T2(I).all valent 5 !!!

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Tous les T2 pointent vers le même pointeur, par conséquent lorsque tu modifies le pointeur - soit directement par P, soit par une case du tableau - cela modifie ce qui est pointé par toutes les cases.

    Le mieux pour comprendre est de faire un schéma des relations

    Le chaînage est le suivant (désolé, je ne suis pas un expert en ascii art )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    T2(1) \ 
    T2(2)  -> P
    T2(3) /

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2008
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 130
    Points : 80
    Points
    80
    Par défaut
    D'accord merci de m'avoir éclairci

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

Discussions similaires

  1. Besoin d'un peu d'aide sur les pointeurs.
    Par techz dans le forum Débuter
    Réponses: 9
    Dernier message: 18/04/2009, 16h32
  2. Besoin d'aide sur les fonction d'interbase
    Par BOUBOU81 dans le forum InterBase
    Réponses: 2
    Dernier message: 05/11/2004, 10h00
  3. besoin d'aide sur les ORB
    Par floorfille dans le forum CORBA
    Réponses: 4
    Dernier message: 24/08/2004, 15h43
  4. Filemaker ... besoin d'aide sur les Plugin
    Par joange dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 22/04/2004, 10h16
  5. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19

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