Structures en C / Win2k / Dev-Cpp

cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006 - 28 avril 2005 à 16:52
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006 - 28 avril 2005 à 17:40
Bonjour à tous,

J'aurai quelques questions à vous poser en ce qui concerne le passage de structures en C. Comme c'est un peu comme les pointeurs, je me mélange les pinceaux. Donc je vais vous donner mes lignes pour essayer de résoudre mon problème ;)
J'ai déclaré une structure comme suit:
typedef struct// Structure d'une stratégie
{
struct // Structure d'une entité
{
char choix; // Valeur correspondant au choix (C,T [ou R] ) définissant le coup
int score;
} entite;
int nb_entite; // Défini le nombre d'entités dans cette stratégie
} strategie;

Et ensuite j'ai fait:
strategie strag[10];

D'après notre prof de prog, pour faire passer une variable d'une structure créée par l'utilisateur, il faut utiliser un pointeur.

Pour faire passer une seule case de ce tableau dans une fonction:
void hihi(strategie *strag)
Et j'appelle cette fonction avec:
hihi(&strag[10]);

Par contre comment faire pour faire passer l'intégralité du tableau dans ma fonction. En utilisant un double pointeur ca fonctionne pas.

En fait j'ai trouvé, je fais la fonction comme ça:
void hihi2(strategie strag[])
et j'appelle la fonction avec:
hihi2(&strag);

Ce que je ne comprends pas, c'est que Dev-Cpp me déclare des erreurs bizarres. Dans ma fonction où je ne fais rentrer qu'une seule case du tableau, il faut que j'utilise '->' pour atteindre mes différents champs de strucutres.
Par contre, quand je fais passer le tableau entier, premièrement je déclare un pointeur classique ce qui n'est pas logique (si on déclare un pointeur pour une case d'un tableau, il faudrait déclarer un double pointeur pour tout le tableau) et deuxièmement, je ne dois plus utiliser '->' car il me dit erreur mais revenir à l'utilisation du '.'

Soit je n'ai pas compris la différence entre le. et le -> dans les structures, soit c'est vraiment bizarre...

Si quelqu'un peut m'éclairer, ca serait gentil.
Msg aux modos: N'hésitez pas à retoucher mon texte si il est mal mis en page, je n'ai pas trouver l'option "citation de code"...

Manger c'est tricher.
Vomir c'est trahir.
Dormir c'est mourir.

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
28 avril 2005 à 17:20
void hihi2(strategie strag[])


et appel avec:
hihi2(strag);


Quand tu créer un tableau : int entier[10].

entier[i] est un entier. Mais "entier" est un pointeur ! :)



donc strag c'est un pointeur, pourquoi veux tu passer l'adresse tu pointeur avec &strag ?



donc l'appel de la fonction:



void hihi2(strategie *strag, int len);



hihi2(strag, longueur du tableau);



Dans la fonction hihi2, strag[i] te donnes accès aux données.





"il faudrait déclarer un double pointeur pour tout le tableau)" => non, pourquoi ?




"premièrement je déclare un pointeur classique ce
qui n'est pas logique" => tu peux déclarer une référence, comme ca,
tu oublis le pointeur (il n'est que masqué par le C++). De plus, le
passage par pointeur ou référence est seulement utile si ta fonction a
besoin de modifier les valeurs des paramètres et pour éviter des copies
trop nombreuses.




Pour faire passer une seule case de ce tableau dans une fonction:
void hihi(strategie & strag)
Et j'appelle cette fonction avec:
hihi(strag[10]); <== plus de pointeur.
0
cs_BaptX Messages postés 30 Date d'inscription samedi 18 décembre 2004 Statut Membre Dernière intervention 28 décembre 2006
28 avril 2005 à 17:40
Je fais passer l'adresse car dans ma structure, j'ai plusieurs champs à modifier. Comme une fonction ne peut renvoyer qu'une seule valeur, autant mettre l'adresse en entrée comme ca je ne renvoie rien et c'est directement modifié.

En tout cas, merci de ton aide, vais essayer de décrypter tout ça ;)

Manger c'est tricher.
Vomir c'est trahir.
Dormir c'est mourir.
0
Rejoignez-nous