IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

probleme pointeur en parametre de fonctions


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut probleme pointeur en parametre de fonctions
    bonjour,

    j'ai un problème avec les pointeur en Perl: en lisant les faq et tuto, c'est écrit qu'on peu faire un pointeur avec \$var. mais quand j'utilise un tel pointeur en parametre de fonction, $var b'est pas modifié...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my $operationComplexity = 1;
    my $operator = 0;
    my $expression = 1;
    my @identifiers = ("test1", "test2");
     
    for (my $i = 0; $i < 10; $i++) {
    	RandomAllocation->operationExpressionInt("test", $operationComplexity, 
    		@identifiers, \$operator, \$expression);
    	print $operator." -|- ".$expression."\n";
    }
    a l'affichage j'ai toujour "0 -|- 1" alors que la fonction RandomAllocation->operationExpressionInt devrait modifier les valeur de $operator , et $expression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    sub operationExpressionInt {
    	my ( $class, $identifier, $complexite, @identifiers, $operator, $expression ) = @_;	
    	my $randValue;
    	my $nbIdentifier = @identifiers;
     
    	# generer un operateur aleatoire
    	$operator = "+";
     
    	# generer une expression aleatoire (valeur ou identifiant du tableau)
    	$randValue = Random->getRandomInt($nbIdentifier);
     
    	if ($randValue == $nbIdentifier) {
    		$expression = Random->getRandomInt();
    	} else {
    		$expression = $identifiers[$randValue];
    	}	
    }
    j'ai tester la fonction sans pointeur, ça marche, ya pas de pb, le probleme se situe au niveau des pointeur qui ne modifie pas les objet pointé.

    étant débutant en perl (j'en fait que depuis 1 mois -_-') j'ai un peu de mal avec les pointeurs (peu etre ne fonctionne t'il pas pareil qu'en C?)

  2. #2
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Si tu penses que ta fonction marcherait en C, c'est que tu n'es pas trop adepte du C... Ce que tu as essayé de faire ressemblerait plus aux références du C++ et encore.
    En effet quand tu passes un pointeur à une fonction en C, si tu veux modifier la valeur, il faut déréférencer le pointeur avant, en Perl c'est pareil.

    --
    Jedaï

  3. #3
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    en effet je suis pas trop un adepte du c -_-', mais c'est ma seul expérience des pointeur.
    Ca veu dire quoi déférencer?

  4. #4
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    En Perl, on parle de "références", pas de "pointeurs" pour souligner qu'on ne peut pas effectuer d'"arithmétique des pointeurs" en Perl (autrement dit tu ne peux pas additionner une référence et un entier en Perl et obtenir une référence, ça ne marche pas comme ça, et du coup tu ne peux pas avoir les bugs d'accès mémoire que tu peux avoir en C).

    L'idée c'est qu'une référence est l'"adresse" d'une valeur, et tu peux l'utiliser pour accéder à la valeur en elle-même, mais pour ça il faut te rendre à cette adresse en "déréférençant" la référence.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    my $valeur = 5;
     
    # \ permet de récupérer une référence sur une variable
    my $ref_sur_valeur = \$valeur;
     
    # $ref_sur_valeur = 3; n'affecterait pas $valeur
     
    #on déréférence
    ${$ref_sur_valeur} = 3;
     
    print $valeur; # affiche "3"
    Mais relit la FAQ, tu as plusieurs exemples dedans, entre autre une référence peut pointer sur un tableau (@) ou un hachage (%) aussi bien que sur un scalaire ($) et dans ce cas il faut déréférencer avec le bon sigil.

    D'un autre côté ton exemple initial n'est vraiment pas un bon exemple d'emploi de références, elles sont parfaitement inutiles et ne font que compliquer le code.

    --
    Jedaï

  5. #5
    Membre expérimenté Avatar de djidane39
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    272
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2006
    Messages : 272
    Par défaut
    Citation Envoyé par Jedai Voir le message
    D'un autre côté ton exemple initial n'est vraiment pas un bon exemple d'emploi de références, elles sont parfaitement inutiles et ne font que compliquer le code.
    C'est vrai, je vien de me rapeler que perl permettait de retourner plusieur scalaire en meme temps -_-'
    en tout j'ai ma réponse quand même, merci ^_^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/03/2015, 08h47
  2. pointeur comme parametre d'une fonction
    Par sissouna01 dans le forum C
    Réponses: 2
    Dernier message: 09/05/2014, 14h15
  3. Réponses: 6
    Dernier message: 16/01/2011, 15h33
  4. Réponses: 8
    Dernier message: 14/12/2007, 17h12
  5. Probleme valeur de parametre dans une fonction
    Par TitouLolo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/05/2005, 13h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo