[C]Pointeurs

Pointeurs [C] - C - Programmation

Marsh Posté le 11-11-2004 à 17:13:20    

Salut,
J'ai une structure tache :
typdedef struct Tache
{
   int arg1;
   int arg2;
   int *resultat;
} Tache;
 
En fait je voudrais que le resultat de cette struture tache pointe sur l'argument d'une autre tache.
 
Par exemple:
 
Tache t1;
Tache t2;
 
t2.resultat = &t1.arg1;
 
 
Mais comment modifier t1.arg1 à partir de t2.resultat;
Je voudrais que le resultat de l'addition de arg1 et arg2 de t2 soit ecrit à l'adresse où pointe t2.resultat soit t1.arg1.
 
Comment faire?  

Reply

Marsh Posté le 11-11-2004 à 17:13:20   

Reply

Marsh Posté le 11-11-2004 à 17:16:32    

*t2.resultat = t2.arg1 + t2.arg2;

Reply

Marsh Posté le 11-11-2004 à 17:44:01    

t1.arg = t2->resultat = t2.arg1 + t2.arg2

Reply

Marsh Posté le 11-11-2004 à 18:38:13    

c0wb0y a écrit :

t1.arg = t2->resultat = t2.arg1 + t2.arg2


Pas d'accord ! t2 n'est pas un pointeur donc tu peux pas écrire  
"t2->..."
 
C'est Panini qui a raison
*(t2.resultat) = t2.arg1 + t2.arg2 (je ne sais pas si les parenthèses sont obligatoires, il y a beaucoup de priorités en C et je ne les connais pas toutes)

Reply

Marsh Posté le 11-11-2004 à 19:09:08    

Code :
  1. Tache t1;
  2.     Tache t2;
  3.     t2.arg1 = 2;
  4.     t2.arg2 = 3;
  5.     t2.res = &t1.arg1;
  6.     *t2.res = t2.arg1 + t2.arg2;
  7.     printf("%d\n", t1.arg1);


 
Affichage : 5 :)

Reply

Marsh Posté le 11-11-2004 à 19:54:48    

Sve@r a écrit :

Pas d'accord ! t2 n'est pas un pointeur donc tu peux pas écrire  
"t2->..."
 
C'est Panini qui a raison
*(t2.resultat) = t2.arg1 + t2.arg2 (je ne sais pas si les parenthèses sont obligatoires, il y a beaucoup de priorités en C et je ne les connais pas toutes)


 
oui j'ai pas fait gaffe (:
Et oui tes parenthèses sont obligatoire, mais comme c'est moche, on écrit avec la fleche (-> ) plutot que parenthese + *

Reply

Marsh Posté le 13-11-2004 à 05:00:31    

Et non les parenthèses ne sont pas obligatoires car  "." a une plus grande précédence que "*", mais c'est une bonne idée d'en mettre pour faciliter la lecture.

Reply

Marsh Posté le 13-11-2004 à 10:23:26    

matafan a écrit :

Et non les parenthèses ne sont pas obligatoires car  "." a une plus grande précédence que "*", mais c'est une bonne idée d'en mettre pour faciliter la lecture.


 
on m'avait dit le contraire  :sweat:

Reply

Marsh Posté le 13-11-2004 à 12:13:10    

c0wb0y a écrit :


Et oui tes parenthèses sont obligatoire, mais comme c'est moche, on écrit avec la fleche (-> ) plutot que parenthese + *
...
on m'avait dit le contraire  :sweat:


Tu fais une confusion entre "pointeur sur structure" et "pointeur sur un membre"
 
1) Si tu as "p" pointeur sur structure et que tu veux récupérer un membre "m" de cette structure, tu dois écrire :
(*p).m
Mais comme c'est moche et fastidieux, on peut remplacer cette écriture par:
p->m
Cette seconde écriture ne change rien. "p" est un pointeur sur une structure et "m" un membre de cette structure
 
2) Maintenant, cas inverse. Tu as "s" une variable de type "struct ..." et "pm" un membre de "s" pointeur sur qq chose, si tu veux récupérer le contenu de "pm" tu dois écrire:
*(s.pm) ou bien *s.pm (puisque matafan dit que les parenthèses ne sont pas obligatoires)
Mais faut faire attention, ici le pointeur c'est "pm" et pas "s" même si on met l'étoile avant "s".
 
A+

Reply

Sujets relatifs:

Leave a Replay

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