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

Flash Discussion :

Besoin d'explication sur le passage d'arguments


Sujet :

Flash

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 64
    Points : 57
    Points
    57
    Par défaut Besoin d'explication sur le passage d'arguments
    Bonjour à tous,

    Je suis tombé sur un truc vraiment bizzard... Normalement, il me semble que dans tous les languages, si l'on a:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //Pour l'exemple en C++
    void modif(int i){
         a++;
    }
    int a=0;
    modif(a);
    cout << a; //Renvera 0
    et en actionscript voici ce qui peut ce passer avec un passage de Array:
    Code : 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
     
    trace("Pour les string:");
    var s:String = new String("a");
    trace("s -> " + s);
    modifStr(s);
    trace("s -> " + s);
     
    trace("Pour les array:");
    var a:Array = new Array(["a"]);
    trace("a -> " + a);
    modifArray(a);
    trace("a -> " + a);
     
    function modifStr(str:String){
    	str += "b";
    	trace("str -> " + str);
    }
    function modifArray(arr:Array){
    	arr.push("b");
    	trace("arr -> " + arr);
    }
    Ceci me renvoi :
    Pour les string
    s -> a
    str -> ab
    s -> a
    Pour les array
    a -> a
    arr -> a,b
    a -> a,b
    Donc pour les string tout va bien mais en ce qui concerne les Array, actionscript agit comme si on utilisait des pointeurs...

    Si quelqu'un a une explication je suis preneur!
    ++
    ChrOnOs

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 47
    Points : 54
    Points
    54
    Par défaut
    Salut,

    a mes yeux ce que tu as en sortie me parrait normal.

    1er détail dans la construction de l'Array, tu créé 2 tableau imbriqué.
    new Array(["a"]) == [ ["a"] ];
    Soit new Array("a") soit ["a"]

    Pour ce qui est du comportement du tableau, il réagit de la même façon que la chaine, ne connaissant pas des languages comme le C, je ne vois pas se que tu appels «des pointeurs».

    ++

  3. #3
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Heuuuuuu si je me souviens bien de mes cours de programmation, les tableaux sont toujours passés par adresse dans les fonctions ce qui explique la sortie de ton programme. Pour que la fonction modifie le paramètre, il doit être passé par adresse ce qui n'est pas le cas par défaut.
    J'espère avoir été assez clair mais sinon une simple recherche avec notre ami Google devrait t'éclairer.
    Bonne continuation,

    O.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 64
    Points : 57
    Points
    57
    Par défaut
    Pour commencer, merci pour vos réponses!

    Citation Envoyé par ali_o_kan
    1er détail dans la construction de l'Array, tu créé 2 tableau imbriqué.
    new Array(["a"]) == [ ["a"] ];
    Soit new Array("a") soit ["a"]
    En effet je m'étais trompé...

    Citation Envoyé par ali_o_kan
    Pour ce qui est du comportement du tableau, il réagit de la même façon que la chaine, ne connaissant pas des languages comme le C, je ne vois pas se que tu appels «des pointeurs».
    Justement pas, les tableau ne réagisse pas de la même manière que les string. Pour les string, la fonction modif travaille avec une copie de ce qui lui est passé en argument alors que pour le array elle modifie directement la variable que l'on lui a donné en argument.
    Bref, pour les array c'est similaire au pointeur en C (quand tu donne un pointeur en argument tu ne donne pas la valeur de ta variable mais son adresse mémoire. Ta fonction modifie donc directement la variable de base.)

    Citation Envoyé par nounetmasque
    Heuuuuuu si je me souviens bien de mes cours de programmation, les tableaux sont toujours passés par adresse dans les fonctions ce qui explique la sortie de ton programme. Pour que la fonction modifie le paramètre, il doit être passé par adresse ce qui n'est pas le cas par défaut.
    J'espère avoir été assez clair mais sinon une simple recherche avec notre ami Google devrait t'éclairer.
    Tout viendrai donc d'une veille lacune! Je ne savais pas que lorsqu'on donnais un tableau en argument, l'adresse mémoire et non la valeur de ce tableau était transmise.

    ++ ChrOnOs

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

Discussions similaires

  1. [xml] Xpath besoin d'explication sur preceding-sibling::
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 10/01/2006, 09h32
  2. besoin d'explication sur le c++
    Par poporiding dans le forum MFC
    Réponses: 13
    Dernier message: 17/12/2005, 18h01
  3. probleme sur le passage d'argument par adresse
    Par ghostdog dans le forum C
    Réponses: 4
    Dernier message: 23/11/2005, 15h50
  4. Besoin d'explications sur un bout de code
    Par zizitop dans le forum C
    Réponses: 7
    Dernier message: 26/04/2005, 14h51
  5. Besoin d'explications sur float et l'élasticité !
    Par KneXtasY dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 14/01/2005, 15h15

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