pointeur et structure

pointeur et structure - C - Programmation

Marsh Posté le 14-02-2004 à 10:23:16    

bonjour,  
 
le point h (je simplifie bien sur)

Code :
  1. typedef struct
  2. {
  3. int val;
  4. }T1;
  5. typedef struct
  6. {
  7. int val1;
  8. }T2;
  9. typedef struct
  10. {
  11. T1 *pval1:
  12. T2 *pval2;
  13. }T3;
  14. extern T3 *ptr3;


 
dans le point C

Code :
  1. T1 t1;
  2. T2 t2;
  3. T3 t3;
  4. T3 *ptr3=&t3;
  5. ptr3->pval2=&t2; /*LA C LE PB*/
  6. ptr3->pval1=&t1; /*LA C LE PB*/


 
voila ca compile pas a cause des 2 lignes au dessus
type non compatible pour ptr3
 
si je bidouille pour que ca compile, les variables globales ne sont pas modifiées, (creation de variables locales)
 
voila je comprend pas pourquoi j arrive pas a declarer les pointeurs pval1 et pval2

Reply

Marsh Posté le 14-02-2004 à 10:23:16   

Reply

Marsh Posté le 14-02-2004 à 10:58:45    

Rien compris a ton histoire:
 
A part ceci  
T1 *pval1:  qui devrait etre T1 *pval1;  
 
Je vois rien qui cloche a ce code.
J'ai d'ailleurs tenté de le compiler en faisant:  
 

Code :
  1. #include "testpb.h"
  2. int main()
  3. {
  4.   T1 t1;
  5.   T2 t2;
  6.   T3 t3;
  7.   T3 *ptr3=&t3;
  8.   ptr3->pval2=&t2; /*LA C LE PB*/
  9.   ptr3->pval1=&t1; /*LA C LE PB*/
  10. return 0;
  11. }


 
et ca s'est compilé sans pb.
 
Le seul cas ou ca marcherait pas, ce serait si tu avais declare ca en dehors du main (ou du corps d'une fonction, ce qui serait stupide, puisque les lignes ou tu as marqué /*LA C LE PB*/ ne seraient pas des pbs mais des lignes fausses (en effet, comme ce ne sont pas des declarations, ces lignes, elles ne sont pas autorisées ici, relis le K&R [il suffit d'ailleurs de reflechir 2 mn: le point d'entree du programme etant main, comment ces instructions pourraient elles etre executées??]
Auquel cas, si tu tiens absolument a declarer le tout en dehors du main, il aurait fallu proceder ainsi:
 

Code :
  1. #include "testpb.h"
  2.   T1 t1;
  3.   T2 t2;
  4.   T3 t3 = {&t1, &t2};
  5.   T3 *ptr3=&t3;
  6.  
  7. int main()
  8. {
  9. return 0;
  10. }


 
là, on a que des declarations avec initialisation, ce qui est authorisé (parce ces initialisations sont effectuables a la compilation).
 
A+,


Message édité par gilou le 14-02-2004 à 11:20:36

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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