Passage d'une liste en argument a une fonction

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
queskispace
Messages : 3
Inscription : ven. 12/nov./2004 2:47

Passage d'une liste en argument a une fonction

Message par queskispace »

Bonjour,

Jbloque sur un truc relativement con, c'est le passage en argument d'une liste à une fonction, avec la possibilité que la fonction puisse modifier les valeurs.
Bon j'ai vu que y a moyen de le faire avec les pointeurs, mais si y a une solution plus pratique je suis preneur. J'ai le meme probleme avec les listes chainé d'ailleurs.
Sinon c'est pas non plus possible de declarer une liste en global ??

Bah voila c'est tout, merci pour vos reponses...
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Passage d'une liste en argument a une fonction

Message par Anonyme2 »

queskispace a écrit :Bonjour,

Jbloque sur un truc relativement con, c'est le passage en argument d'une liste à une fonction, avec la possibilité que la fonction puisse modifier les valeurs.
Bon j'ai vu que y a moyen de le faire avec les pointeurs, mais si y a une solution plus pratique je suis preneur. J'ai le meme probleme avec les listes chainé d'ailleurs.
Sinon c'est pas non plus possible de declarer une liste en global ??

Bah voila c'est tout, merci pour vos reponses...
C'est quoi au juste une liste ? Si c'est un tableau, c'est déclaré global donc accessible dans toutes les procédures.

Les listes chainées sont basées à l'origine sur des variables globales. Les listes chainées sont connues par toutes les procédures d'un programme.

On ne peut passer en arguments que des valeurs sur 1, 2 ou 4 octets.
Pas de problème pour les byte, long etc mais on peut pas pas une chaine entière. D'ailleurs, comment faire pour passer une chaine dont lors de la programmation, son contenu n'est pas connu. La chaine peut avoir une longueur de 10 octets tout comme elle peut avoir 60 Ko. On passe son adresse à la fonction, de la même manière on ne peut pas passer une variable entière bassée sur une structure, on passe soit l'adresse de la variable, soit un pointeur. La notation par pointeur pemet permet d'accéder aux champs d'une variable basée sur une structure ou sur une liste chainée (il n'y a que cette méthode qui le permet).
brossden
Messages : 825
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour à tous

Désolé de te contredire Denis mais on peut passer une chaine de longueur trés importante. De plus ont peut utiliser un séparateur, ici "#" pour morceller une chaine.

Code : Tout sélectionner

Procedure affiche(texte.s)
  Sep=FindString(texte,"#",1)
  MessageRequester(Left(texte,Sep-1),Mid(texte,Sep+1,1000))
EndProcedure

Chaine.s="Message passé en paramètre # Ceci me parait être une Chaine assez longue non ?"+Chr(13)+Chr(10)+"Si ce n'est pas le cas je peux faire plus long encore !"

affiche(Chaine)
Denis

Bonne Jounée à tous
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

brossden a écrit :Bonjour à tous

Désolé de te contredire Denis mais on peut passer une chaine de longueur trés importante. De plus ont peut utiliser un séparateur, ici "#" pour morceller une chaine.
Salut brossden

Non vraiment je ne vois pas ou tu me contredis.

Bien sur que l'on 'peut passer une chaine' même longue mais le vocabulaire est impropre.

On ne passe pas une chaine à la procédure mais son adresse codée sur 32 bit, après que la chaine fasse 0 caractère ou 5000, ça ne change rien.
Heureusement d'ailleurs car c'est pratique le 'passage de chaine' à une procédure.

Lorsque l'on passe des paramètres à une procédure, on met sur la pile les valeurs correspondantes aux paramètres, 32 ou 16 bit.
brossden
Messages : 825
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Denis je pense que tu cherches la petite bête, on se fou complètement de comment est traitée ou codée l'information pour le passage de données à une procedure, mais ce qui est sûr c'est que dans la syntaxe on passe bien une chaine en paramètre, > Chaine < dans mon exemple et non son adresse qui aurait été > @Chaine <. On fait du basic ici pas du laguage machine.
Denis

Bonne Jounée à tous
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Peut-être mais pour utiliser les fonctions avancées de PureBasic, c'est bien de savoir ce que l'on manipule.
Répondre