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

C Discussion :

Passage de tableau en parametre


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut Passage de tableau en parametre
    bonjour,

    voilà c'est surement très bete mais je ne trouve pas...
    j'arrive à passer un tableau en parametre comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Action(int**Carte);
     
    dans mon main :
    int **Carte
    Action(Carte);
    mais si je modifie une valeur du tableau dans ma fonction, cette modification persiste...

    comment puis-je faire pour passer 'par valeur'?
    dois je forcement faire une copie du tableau avant de le passer?

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Elstak
    voilà c'est surement très bete mais je ne trouve pas...
    j'arrive à passer un tableau en parametre comme par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void Action(int**Carte);
     
    dans mon main :
    int **Carte
    Action(Carte);
    mais si je modifie une valeur du tableau dans ma fonction, cette modification persiste...

    comment puis-je faire pour passer 'par valeur'?
    dois je forcement faire une copie du tableau avant de le passer?
    http://emmanuel-delahaye.developpez....difie_variable

    Mais visiblement, tu confonds le tableau lui même et ses valeurs...

    Pour faire une création dynamique, il vaut mieux retourner l'adresse du bloc crée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int** void Action(/* a definir */);
    dans mon main :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int **Carte = Action();

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    les pointeurs sur pointeur, ça découpe la mémoire en tranches
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
             |  [pointeur sur pointeur 1] |       .....
    pointeur1|____________________________|__________________
    pointeur2|____________________________|__________________
     ......  |                            |
    ?

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    pffff,

    je m'en sortirai jamais avec ces pointeurs

    visiblement, tu confonds le tableau lui même et ses valeurs...
    dans ma tete non mais peut etre dans mon code...

    là je ne veux pas créer de tableau dynamiquement mais utiliser les valeurs du tableau Carte (qui a déjà été créé et rempli avant).

    désolé mais avec ton lien j'arrive toujours pas à voir comment faire

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 116
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 116
    Par défaut
    En fait, je l'ai écrit mais supprimé parce que la réponse m'a précédé, il faut séparer l'argument de son adresse.

    soit la fonction incremente() qui incremente une variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void incremente(int * k)
      {
      *k=*k+1;
      }
    dans le main, pour incrémenter la variable var, il faut faire comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int main(void)
      {
      int var=0;
      ...
      incremente(&var);
      /*ici var vaut maintenant 1*/
      ...
      return 0;
      }
    vouloir modifié dans le orps d'une fonction une variable passée en argument est vain, qu'il s'agisse d'un pointeur, d'un pointeur de pointeur ou simplement d'un entier.

    Carte est un pointeur sur pointeur. Tout ce que vous pourrez modifier ce sont les valeurs de *(Carte+x) ou **(Carte+y) , mais jamais Carte.

    Cart est l'ultime pointeur sur pointeur à la racine du tableau. De toute façon la valeur est recopiée à l'appel de la procédure et remise dans Carte à la sortie de la procédure.

    (x et y sont des inconnues que je vous laisse remplacer je préfère le dire)

    C'est vraiment ce que vous avez fait dans votre algorithme ou vous voyez quelque chose à corriger (j'aime bien aider, mais pas tromper :: dans la mesure du possible, il est bon d'être prévenu quand on dit des bêtises )

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Oula,

    euh, je pense avoir bien compris ce que tu m'as dit mais j'ai du mal m'expliquer.

    en fait voici mon main


    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
    19
    20
        for(i=0;i<NbLigneCarte;i++)
        {
            for(j=0;j<NbColCarte;j++)
            {
                printf("%d;",Carte[i][j]);
            }
            printf("\n");
        }
     
        Action(&Player,(*Ennemy),Carte,&Bomb,NbLigneCarte,NbColCarte,NbEnnemi);
     
     
        for(i=0;i<NbLigneCarte;i++)
        {
            for(j=0;j<NbColCarte;j++)
            {
                printf("%d;",Carte[i][j]);
            }
            printf("\n");
        }
    (peu importe les autre parametre on ne se soucie que de Carte)


    voici ma fonction

    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
    void Action(Joueur *Joueur1,Ennemi Ennemi1,int**Carte,Bombe *Bombe1,int NbLigne,int NbCol,int NbEnnemi)
    {
        int i;
        int j;
        int AuncuneAction = 1;
     
        Carte[1][1]=5;
     
        for(i=0;i<NbLigne;i++)
        {
            for(j=0;j<NbCol;j++)
            {
                printf("%d;",Carte[i][j]);
            }
            printf("\n");
        }    
     
    }
    au debut toutes les valeurs dans mon tableau Carte son à 1 et là j'en met une à 5 et je voudrais que ca ne reste pas à 5 en dehors de la fonction.

    exemple:

    1ere boucle for du main
    1;1;1;1
    1;1;1;1

    Boucle de la fonction
    1;1;1;1
    1;5;1;1

    2eme du main
    1;1;1;1
    1;1;1;1
    ou alors j'ai peut etre mal compris la réponse

Discussions similaires

  1. passage par référence d'un tableau en parametre de fonction
    Par crazykangourou dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/01/2009, 14h30
  2. Réponses: 6
    Dernier message: 08/12/2008, 13h17
  3. Réponses: 2
    Dernier message: 24/07/2007, 20h16
  4. [Tableaux] passage de tableau en parametre par l'url
    Par arnolpourri dans le forum Langage
    Réponses: 10
    Dernier message: 15/06/2006, 14h32
  5. passage d'un tableau en parametre d'une fonction
    Par ataya dans le forum C++Builder
    Réponses: 10
    Dernier message: 26/10/2005, 13h30

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