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 :

[Debutant] Pointeur sur tableau


Sujet :

C

  1. #1
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut [Debutant] Pointeur sur tableau
    Bonjour,

    je me suis recemment lancé dans le c grace au tutos de ce site (clap clap au passage).

    Et je me heurte à un petit problème qui en est un gros pour moi.

    Alors en fait, j'ai une fonction dont voici le prototype:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void placer(int pointeurSurChiffreCode[2][4], int pointeurSurPropositionCode[2][4], long *pointeurSurBonnePlace, long *pointeurSurPasBonnePlace, long *pointeurSurInGame);

    Mon problème est que cette fonction travaille sur des tableau de dimension 2 (chiffreCode et propositionCode seulement, le reste sont des variables classiques de type long).

    J'ai essayé plusieurs chose pour que cette fonction ne provoque pas d'erreur à la compilation, et qui plus est, fonctionne, en vain.

    Pour le moment, j'utilise ça, mais ça ne marche po :'(

    Appel à la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    placer(&chiffreCode, &propositionCode, &bonnePlace, &pasBonnePlace, &in_game);

    Utilisation des variables dans la fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pointeurSurChiffreCode[1][i]

    Voilà, j'espère avoir été clair. Un petit peu d'aide serait chouette.

    Je met la fonction aussi si ça peu aider:
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    void placer(int pointeurSurChiffreCode[2][4], int pointeurSurPropositionCode[2][4], long *pointeurSurBonnePlace, long *pointeurSurPasBonnePlace, long *pointeurSurInGame)
    {
            //Compteur de bien placés/mal placés - Début
            i = 0;
            j = 0;
            k = 0;
     
            //Boucle pour les bien placés - début
            while (i<4)
            {
                    *pointeurSurBonnePlace = 0;
                    //On met à zero toutes les valeurs
                    pointeurSurChiffreCode[1][i] = 0;       
                    for (i=0;i<4;i++)
                    {
                            if (pointeurSurPropositionCode[0][i] == pointeurSurChiffreCode[0][i])
                            {
                            *pointeurSurBonnePlace++;
                            pointeurSurChiffreCode[1][i] = 1;
                            pointeurSurPropositionCode[1][i] = 1;
                            }
                    }       
            }
            // Boucle pour compter les biens placés - fin
            // Comparaison de fin de jeu et compter les mals placés - debut
            if (*pointeurSurBonnePlace == 4)
            {
                    *pointeurSurInGame=2;
            }
            if (*pointeurSurInGame == 2)
            {
                    *pointeurSurPasBonnePlace = 0;
            }
            // Comparaison de fin de jeu - fin
            //compter les mals placés - debut
            else
            {
                    while (j<4)
                    {
                            *pointeurSurPasBonnePlace = 0;
                            for (j=0;j<4;j++)
                            {
                                    for (k=0;k<4;k++)
                                    {
                                            if ((pointeurSurPropositionCode[0][j] == pointeurSurChiffreCode[0][k]) && (pointeurSurPropositionCode[1][j] == 0) && (pointeurSurChiffreCode[1][k] == 0))
                                            {
                                                    *pointeurSurPasBonnePlace++;
                                                    pointeurSurPropositionCode[1][j] = 1;
                                                    pointeurSurChiffreCode[1][k] = 1;
                                            }
                                    }
                            }
                    }
            }
            // compter les mals placés - fin
            //Compteur de bien placés/mal placés - Fin
    }
    Vi vi, je fait un mastermind (je débute j'ai dit )
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  2. #2
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Quel est ton message d'erreur ? Comment sont déclarés chiffreCode, propositionCode etc.. ?

    Je crois que tu mélanges un peu pointeur et tableaux. Qu'est censé contenir pointeurSurPropositionCode par exemple ?

  3. #3
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    Salut,

    en effet je patoge un peu là, voilà mes déclarations:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int chiffreCode[2][4];
    int propositionCode[2][4];
    long *pointeurSurBonnePlace = &bonnePlace, *pointeurSurPasBonnePlace = &pasBonnePlace;
    long *pointeurSurInGame = &in_game;
    et voila les messages d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1>main.c (226) : warning: passing argument 1 of 'placer' from incompatible pointer type
    1>main.c (226) : warning: passing argument 2 of 'placer' from incompatible pointer type
    ça correspond à la ligne où j'appelle ma fonction pour m'en servire.
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  4. #4
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    tu peux montrer la déclaration de toutes les variables STP ?
    A moins que bonneplace et pasBonnePlace ne soit pas déclaré ?
    Ah je crois que j'ai compris regarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void placer(int pointeurSurChiffreCode[2][4], int pointeurSurPropositionCode[2][4], long *pointeurSurBonnePlace, long *pointeurSurPasBonnePlace, long *pointeurSurInGame);
    il devrait y a voir une étoile à ces endroits là non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void placer(int * pointeurSurChiffreCode[2][4], int * pointeurSurPropositionCode[2][4], long *pointeurSurBonnePlace, long *pointeurSurPasBonnePlace, long *pointeurSurInGame);
    Essaye comme ça parce que en faîte tu passe des pointeurs alors que dans ton prototype et dans ta déclarartion tu n'indique pas que ce sont des pointeurs(il faut mettre une *), eh oui appelé tes variables pointeursCeci pointeurCela ne suffit pas à les transformer en pointeur
    Omnes Vulnerant Ultima Necat
    Bye

  5. #5
    Membre habitué Avatar de Pahcixam
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    289
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 289
    Points : 191
    Points
    191
    Par défaut
    J'ai essayé déjà avec une ou deux étoiles mais ça marche jamais, ça m'enerve !!!

    Avec des tableau à une dimension, j'ai pas eu un problème, et la c'est la merd*****.
    Quelques conseils:

    Utilisez <?php plutôt que <?
    Utilisez des ' et la concaténation plutôt que "
    Pensez à revenir à la ligne après chaque ; pour plus de clarté.
    // Commentez votre code un maximum

  6. #6
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 011
    Points : 1 375
    Points
    1 375
    Par défaut
    Si je peux me permettre un conseil, familiarise toi davantage avec les pointeurs/tableaux/pointeurs de pointeurs avant de te lancer dans un problème aussi complexe que la programmation d'un mastermind.

    J'ai trouvé ce TP qui pourrait t'aider à te familiariser avec ces notions (très complexes au demeurant pour quiconque se lance à la conquête du C) http://www-sop.inria.fr/oasis/Carine.Courbis/c/tp2/
    Sans oublier la FAQ
    http://c.developpez.com/faq/c/?page=...bleau_2D_alloc
    http://c.developpez.com/faq/c/?page=...leau_parametre
    http://c.developpez.com/faq/c/?page=...tre_ndimension

  7. #7
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void placer(int pointeurSurChiffreCode[2][4], int pointeurSurPropositionCode[2][4], long *pointeurSurBonnePlace, long *pointeurSurPasBonnePlace, long *pointeurSurInGame);
    ....
    int chiffreCode[2][4];
    int propositionCode[2][4];
    ....
    placer(&chiffreCode, &propositionCode, &bonnePlace, &pasBonnePlace, &in_game);
    Il n'y a aucune raison pour placer & devant le nom du tableau. Si tu le fais, le type de l'argument est adresse d'un tableau [][4] de int : int (*)[][4]
    Dans la déclaration de placer, le paramètre correspondant a le type adresse de tableau de 4 int: int (*)[4] qui est exactement le type de chiffreCode à l'évaluation .
    Conclusion : supprimer les & devant les noms de tableau lors de l'appel
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  8. #8
    Membre éprouvé
    Avatar de Shugo78
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 119
    Points : 1 001
    Points
    1 001
    Par défaut
    J'avais mal regarder ton code en fait c'est(te vexe pas) un peu n'importe quoi, je suis d'accord avec muad'dib la FAQ de developpez est de plus très complète et très bien, bon courage .
    Omnes Vulnerant Ultima Necat
    Bye

Discussions similaires

  1. PB Realloc avec pointeur sur tableau passé en parametre
    Par la_chevre dans le forum Débuter
    Réponses: 2
    Dernier message: 06/02/2009, 12h04
  2. Pointeur sur tableau de structure
    Par Mercenary Developer dans le forum Débuter
    Réponses: 3
    Dernier message: 22/09/2008, 08h35
  3. [x86_64] Passer un pointeur sur tableau défini dans .data
    Par khazna dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 24/04/2008, 19h49
  4. (Tres debutant) :Question sur Tableau array
    Par alexwolf dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2007, 13h49
  5. Réponses: 11
    Dernier message: 20/10/2006, 13h19

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