Passage d'une structure en argument de fonction

Passage d'une structure en argument de fonction - C - Programmation

Marsh Posté le 18-05-2014 à 10:29:18    

Bonjour. J'ai créer  une structure dans mon .h:
 

Code :
  1. struct chose {
  2.     int x; // pour l'exemple
  3.     int y;
  4. };
  5. typedef struct chose chose;


 
Dans mon main, j'ai initialisé une variable de type chose, que j'ai passé a une fonction void de maniére a pouvoir modifier cette structure dans la fonction (je croit qu'on dit en "paramétre d'entrée/sortie" ):
 
MAIN:

Code :
  1. chose machose;
  2. int valeur;
  3. fonction1(&machose);
  4. valeur = machose.x;
  5. printf("%d", valeur);


 
Et voici le code de "fonction1" et de "fonction2":
 

Code :
  1. void fonction1(chose *p_machose) {
  2. (p_machose->x) = 5;
  3. fonction2(p_machose); // c'est déjà une adresse, je ne met pas de &, erreur?
  4. }
  5.  
  6. void fonction2(chose p_machose) { // erreur?
  7. (p_machose->x)++;
  8. }


 
C'est a ce moment que j'ai un problème, même si sur cet exemple c'est inutile, je veut passer ma structure a une autre fonction que j'appelle dans fonction 1, mais de façon a pouvoir toujours modifier ses valeurs a l'intérieur de fonction2. Or, je n'y parvient pas, j'ai donc du faire une erreur dans les paramètres de la 2éme fonction ? Ou alors, il s'agit d'une erreur dans la notation de l’accès au champ.
 
Ça ne doit pas être très compliqué mais je n'y arrive pas... Sauriez vous résoudre mon problème ?
 
Merci d'avance et bon dimanche !

Reply

Marsh Posté le 18-05-2014 à 10:29:18   

Reply

Marsh Posté le 18-05-2014 à 11:27:36    

Bonjour !
 
Vous avez eu exactement le même problème l'autre fois (http://forum.hardware.fr/hfr/Progr [...] 1998_1.htm), la réponse sera la même : si vous voulez modifier la structure dans "fonction2", passez un pointeur, pas une copie ! D'autant plus que vous l'avez fait correctement pour "fonction1".
 
A bientôt pour un 3ème post sur le même problème ? :) :) :)
 
Bonne continuation !

Reply

Marsh Posté le 18-05-2014 à 13:47:48    

Bonjour, merci pour votre aide ! Je n'avais pas vu cette erreur (qui est bête en plus). Ça fonctionne très bien maintenant.
 
Par contre, je ne suit pas "kolorius" qui avait visiblement eu un probléme similaire dans le lien que vous me donnez :)

Reply

Marsh Posté le 18-05-2014 à 22:11:43    

En effet, j'ai honteusement confondu ... Note pour la suite : attendre d'être bien réveillé avant de faire le donneur de leçons sur le forum !
 
Toutes mes excuses et bonne continuation !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed