Retour multiple via passage de paramètres par adresse, langage C
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Retour multiple via passage de paramètres par adresse, langage C



  1. #1
    invite08100636

    Retour multiple via passage de paramètres par adresse, langage C


    ------

    Bonjour,

    Dans mon cours de C (niveau DUT), il est expliqué qu'une fonction ne peut retourner qu'une unique valeur. Jusqu'ici pas de problème. Cependant, dans les avantages du passage de paramètre via l'adressage, il est dit que l'on peut faire retourner autant de valeurs que l'on veut simplement en les passant en argument, Là je ne comprends pas la démarche. Si vous pouviez m'éclaire, merci.

    -----

  2. #2
    sandrecarpe

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Salut,

    Code:
    void fonction(int &arg1)
    {
        arg1 = 25;
    }
    
    
    int main(int argc, char *argv[])
    {
    
        int param=5;
        fonction(param);
    
        cout << param << endl;
    
        return 0;
    }

    En temps normal, tu donnes à ta fonction une copie de ta variable. Elle est définit seulement dans ta fonction, tu ne peux plus accéder à son contenu en dehors de la fonction. En revanche, si tu lui donnes en paramètre l'adresse de la variable, tu sais retrouver la variable d'origine et même en dehors de la fonction !

    Dans cet exemple, note le & qui définit le passage par référence. La fonction attends en paramètre, l'adresse d'une variable int et non une simple variable. Tu vas par cette adresse, accéder à la variable param déclaré dans le main().

    Après, si t'as besoin que ta fonction retourne d'autre valeurs, il suffit d'ajouter d'autres paramètres par référence à ta fonction sur le même principe que dans l'exemple
    J'espère que j'ai été à peu près clair, j'ai pas l'habitude d'expliquer ce genre de chose^^
    Dernière modification par sandrecarpe ; 16/12/2015 à 17h48.

  3. #3
    invite08100636

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Premièrement, merci d'avoir répondu, et si vite !

    En fait si j'ai compris c'est en quelque sorte parce que l'adresse de la variable étant dans le compilateur, c'est comme si elle était en global ?
    Si c'est ça je considère que c'est de la "triche" par rapport aux propriétés de retour de la fonction "classique" ahah

    Par contre j'ai pas compris la ligne après l'appel de la fonction et en gros quand je le compile, il y a des érreurs, au niveau du "&" , j'ai mit un * mais il ne faudrait pas alors déclaré le pointeur ? (j'essaye de comprendre/corriger, pour vraiment capter la globalité du truc, pas pour pinailler )

  4. #4
    CM63

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Bonjour,

    Si on veut faire cela par retour de la valeur (unique) d'une fonction, le mieux est de passer par une structure de données.

    A plus.

  5. A voir en vidéo sur Futura
  6. #5
    invite08100636

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Merci CM23 mais c'était juste par compréhension de la démarche

  7. #6
    sandrecarpe

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Bizarre que t'es une erreur...j'ai fais ça sur QT
    T'as bien copié collé ? T'as pas oublié le prototype de la fonction si tu la déplacé ?

    C'est même pas "comme" une variable global. En précisant à la fonction que tu fais un passage par référence, tu lui dis de ne pas copier la variable passée en paramètre mais de modifier la variable elle-même !
    Du coup, le seul moyen de modifier la variable elle-même, c'est de donner son adresse à la fonction. Et pour donner en paramètre une adresse de variable on rajoute une esperluette (&)
    Dis toi que le & c'est le symbole de l'adresse d'une variable : si tu fais un cout << &variable , ça va t'afficher son adresse

  8. #7
    sandrecarpe

    Re : Retour multiple via passage de paramètres par adresse, langage C

    J'ai pas vu que c'est du C et non du C++ que tu fais...

    Le passage de paramètre par référence n'existe pas en C, mais c'est presque pareil. J'ai pompé le code sur internet. Il faut utiliser des pointeurs normaux du coup.

    Code:
    void test(int *pj) /* test attend l'adresse d'un entier... */
    {
        *pj=2;          /* ... pour le modifier. */
        return;
    }
    
    int main(void)
    {
        int i=3;
        test(&i);       /* On passe l'adresse de i en paramètre. */
        /* Ici, i vaut 2. */
        return 0;
    }
    Donc en gros y a juste a remplacé le & par une * dans la déclaration de la fonction, et dans le main, ne pas oublier de donner une adresse en paramètre (avec le & cette fois ci). Et dans la fonction, quand on accède au contenu pointer par l'adresse, on oublie pas le * devant la variable
    Dernière modification par sandrecarpe ; 16/12/2015 à 18h22.

  9. #8
    invite08100636

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Je suis sous Code Block c'est p_ê pour ça. Je suis pas encore un expert ahah

    moi je l'aurais écrit comme ça : (désolé, je ne sais pas comment faire script)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    void fonction(int *);
    
    
    void fonction(int *arg1)
    {
        arg1 = 25;
    }
    
    
    
    
    int main(int argc, char *argv[])
    {
    
    
        int param=5;
        fonction(&param);
    
    
        //cout << param << endl;
    
    
        return 0;
    }

    Donc je contourne la variable locale qui utilise une mémoir temporaire pour modifier l'adresse via la variable du main ?
    genre : int param=5; je lui demande d'aller à l'adresse de 5 et d'y appliquer la fonction ?


    Edit 1: je suis plutôt fier d'avoir trouvé tout seul, c'est bon signe pour demain mdr

    Edit 2: UN GRAND MERCI ! j'ai compris le truc je pense, ou plutôt j'espère! à plus !
    Dernière modification par JPL ; 17/12/2015 à 17h12. Motif: Ajout de la balise Code (#) pour garder l'indentation

  10. #9
    sandrecarpe

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Nan il manque un truc
    Dans ta fonction, actuellement, tu modifies pas la valeur de ce que contient réellement la variable mais son adresse. En gros, tu mets dans la variable arg1 l'adresse 25^^
    Et toi c'est pas ce que tu veux. Pour affecter une valeur, une vraie, à un pointeur, on fait :
    *arg1= 25;

    Bonne chance pour ton controle^^

    EDIT: A non même pas, QT me met une erreur
    Dernière modification par sandrecarpe ; 16/12/2015 à 18h33.

  11. #10
    invite08100636

    Re : Retour multiple via passage de paramètres par adresse, langage C

    Je m'en suis aperçut sur la copie cet après-midi, mais je n'ai pas réitéré l'erreur, du moins j'espère !

    En tout cas merci !

Discussions similaires

  1. Detecteur de passage multiple
    Par invitecf75ff00 dans le forum Technologies
    Réponses: 6
    Dernier message: 24/09/2012, 12h21
  2. PERL, passage de paramètres d'un fichier à un autre
    Par invitea09e49c1 dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 11/04/2012, 10h28
  3. SPICE: passage de paramètres
    Par Jack dans le forum Électronique
    Réponses: 1
    Dernier message: 27/05/2007, 11h14
  4. Passage de paramètres en PHP
    Par invitea7218790 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 25/07/2006, 10h42
  5. PHP : problème de passage de paramètres avec GET
    Par invite24357dd0 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 19/05/2005, 21h13