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

C Discussion :

Structure en argument


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 19
    Par défaut Structure en argument
    Bonsoir,
    j'ai réalisé un progrmme qui se compileet marche mais le passage d'argument ne s'effectue pas. Tout e programme s'execute mais ce que j'obtient dans la structure de la fonction appelé ne se transfert pas dans la structure de la fonction appelante. Voici un morceau du programme:

    Fonction appelante:
    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
     
    typedef struct adresse{
    	char numeroderue [4];
    	char nomrue [24];
    }adresse;
     
    typedef struct client{
    	adresse adrclient;
    	char nomclient [24];
    	char prenomclient [24];
    }client;
     
    client x;
     
    void fonctionprincipale()
    {
          saisiradresse( x.adrclient);
    }





    Et la fontion appelée
    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
     
    adresse saisiradresse ( struct adresse s )
    {
            int lg;
           printf("  Adresse       :\n"); 
     
           printf("\t\t   -numero de rue:");
           fflush(stdin);
           gets(s.numeroderue);
           lg = strlen(s.numeroderue);
     
           printf("\t\t   -nom de rue:");
           fflush(stdin);
           gets(s.nomrue);
     
           return ( s); 
    }

    Merci beaucoup pour votre aide.
    Pierre

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    c'est normal..

    Si tu veux modifier la structure, il faut que tu passes son adresse..

    La ca fait une copie, et ca modifie la copie...

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Comme l'indique souviron34, tu dois passer l'adresse de ta structure.

    Le langage C implémente une seule forme de passage de paramètres : passage par valeur.

    Les arguments utilisés dans une fonction sont des copies des variables passées à la fonction.

    Quand tu passes une adresse (un pointeur) à une fonction, c'est une copie du pointeur qui est utilisée dans la fonction (donc le pointeur originel n'est pas modifié même si la copie au sein de la fonction peut l'être) mais la donnée (type scalaire, structure, ..) dont l'adresse est affectée au pointeur est alors modifiable.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par win-pierre Voir le message
    j'ai réalisé un progrmme qui se compileet marche mais le passage d'argument ne s'effectue pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    adresse saisiradresse ( struct adresse s )
    {
    <...>
    }
    http://emmanuel-delahaye.developpez....difie_variable

Discussions similaires

  1. Passage d'une structure en argument de classe
    Par so.generously dans le forum Langage
    Réponses: 3
    Dernier message: 27/05/2009, 10h07
  2. Comment passer une structure en argument?
    Par brunobzh dans le forum C
    Réponses: 2
    Dernier message: 04/05/2008, 10h35
  3. Passer une structure en argument
    Par phoibe dans le forum C
    Réponses: 20
    Dernier message: 22/11/2007, 19h56
  4. lire pointeur sur structure en argument
    Par Linu6 dans le forum C
    Réponses: 3
    Dernier message: 23/09/2007, 00h53
  5. Réponses: 2
    Dernier message: 14/03/2007, 02h38

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