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 :

Pointeur sur macro_constante ?


Sujet :

C

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut Pointeur sur macro_constante ?
    Hello !

    J'ai un p'tit problème insolite !!


    Je désire passer en paramètre à une fonction une constante (macro); le problème, c'est que dans l'en-tête de ma fonction, je récupère un pointeur... et donc, évidemment, ça coince !

    Y a-t-il une subtilité pour passer outre ?


    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
     
    # define TAILLEMAXMATRICE 15
     
    .....
     
    void liberememoire( int * * graphe, int * taille )
    {
      size_t i;
      for ( i = 0; i < * taille; i++ )
      {
        free( graphe[i] ), graphe[i] = NULL;
      }
      free( graphe ), graphe = NULL;
    }
     
     
     
     
    int * * initgraphe( void )
    {
      .....
     
       if ( err ) liberememoire( tab, TAILLEMAXMATRICE );
     
      .....
    }

    Merci d'avance


    EDIT : je viens de me rendre compte que ma question n'avait pas de sens vu qu'une macro_constante est accessible depuis n'importe où ...
    Cependant, comment envoyer à ma fonction la valeur de ma constante ?

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Alors là tu fais vraiment n'importe quoi.

    Si c'est une constante pourquoi la passer en paramètre ? Bon ça peut se comprendre.

    Mais alors si c'est une constante pourquoi prendre un pointeur de l'autre côté, je comprends pas mais pas du tout.

    Si tu veux que ça marche enlève l'étoile dans le prototype de la fonction.

    Explique correctement.

  3. #3
    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 Mike888
    Je désire passer en paramètre à une fonction une constante (macro); le problème, c'est que dans l'en-tête de ma fonction, je récupère un pointeur... et donc, évidemment, ça coince !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void liberememoire( int * * graphe, int * taille )
    Pourquoi un pointeur ? Qu'et-ce qui ne va pas avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void liberememoire (int **graphe, size_t taille)
    {
       size_t i;
       for ( i = 0; i < taille; i++ )
       {
          free (graphe[i]), graphe[i] = NULL;
       }
       free (graphe), graphe = NULL;
    }
    C'est pas la peine de compliquer plus que nécessaire... Et là, comme par miracle (en fait simple logique mâtinée de bon sens), tu peux utiliser la constante.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Je m'attendais à vos réponses

    En fait, si je récupère un pointeur sur int dans ma fonction, c'est parce que j'appelle cette fonction depuis d'autres endroits dans le code où là, je passe une adresse...
    C'est tout simple !

    Ici par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    void existechemin( int * * graphe, int * taille )
    {
      int * * graphetemp = NULL;
      graphetemp = produitmatriciel( graphe, taille );
      affichematrice( graphetemp, taille );
      waiting();
      liberememoire( graphetemp, taille );
    }

    Donc, la question n'est pas résolue !

  5. #5
    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 Mike888
    Donc, la question n'est pas résolue !
    Ben si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void existechemin( int * * graphe, int taille )
    {
    <...>
    }
    Pourquoi ce pointeur ? Justifie le ou reste simple.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Ben si :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void existechemin( int * * graphe, int taille )
    {
    <...>
    }
    Pourquoi ce pointeur ? Justifie le ou reste simple.
    Ben non, parce que quand j'appelle existechemin(), je passe aussi une adresse !
    Non, je pense pas qu'il y ait de soluce à ce niveau; mais c'est pas grave, j'ai procédé autrement !

  7. #7
    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 Mike888
    Ben non, parce que quand j'appelle existechemin(), je passe aussi une adresse !
    Pourquoi tu passes une adresse ?

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Pourquoi tu passes une adresse ?
    La variable taille contient la taille d'une matrice chargée en mémoire depuis un fichier txt.
    Cette taille peut varier puisqu'à tout moment le user peut charger un nouveau fichier (avec une matrice de taille différente...). Et la fonction dans laquelle la taille est initialisée/définie n'est pas celle où elle est déclarée.
    Donc, je trimbale la variable taille partout dans mon code.

    Je sais pas si je suis très clair dans mes explications mais bon ...


    De toute manière, c'est pas grave, je me suis arrangé autrement !

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Fia,
    Citation Envoyé par Mike888
    La variable taille contient la taille d'une matrice chargée en mémoire depuis un fichier txt.
    Cette taille peut varier puisqu'à tout moment le user peut charger un nouveau fichier (avec une matrice de taille différente...). Et la fonction dans laquelle la taille est initialisée/définie n'est pas celle où elle est déclarée.
    Donc, je trimbale la variable taille partout dans mon code.

    Je sais pas si je suis très clair dans mes explications mais bon ...


    De toute manière, c'est pas grave, je me suis arrangé autrement !
    Là, il y a une claire erreur de conception : la taille peut varier, et ailleurs tu la passes à partir d'une constante ?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Citation Envoyé par droggo
    Fia,

    Là, il y a une claire erreur de conception : la taille peut varier, et ailleurs tu la passes à partir d'une constante ?
    Mais non, la constante, c'est la taille maximale possible pour une matrice.
    La variable taille, c'est la taille de la matrice chargée en mémoire (taille qui ne peut pas dépasser la taille maximale).

  11. #11
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    AHHHHHHHHHHHHH

    Ben alors pourquoi se compliquer la vie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void ma_fonction ( FILE *fich, char **buff, int *taille )
    {
        .....
     
        *taille = taille_du_fichier :
        if ( *taille > TAILLE_MAX )
              *taille = TAILLE_MAX :
    ....
    }

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Citation Envoyé par souviron34
    AHHHHHHHHHHHHH

    Ben alors pourquoi se compliquer la vie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void ma_fonction ( FILE *fich, char **buff, int *taille )
    {
        .....
     
        *taille = taille_du_fichier :
        if ( *taille > TAILLE_MAX )
              *taille = TAILLE_MAX :
    ....
    }
    Mais arrêtez de chercher des réponses à tous mes posts
    Vous ne connaissez absolument pas le reste du code donc, vous n'irez pas bien loin ...

    Ce thread est clos

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    holà !!!

    si tu ne voulais pas d'aide, fallait pas poster ...

    Et si tu postes pas le code incriminé, t'étonnes pas si on répond à côté.

    Et maintenant, je te prierais d'employer un ton autre sur ce forum.

    Merci


  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2003
    Messages : 464
    Par défaut
    Je vois pas pq tu t'énerves; ça fait quelque post déjà que j'ai dit que j'avais résolu le problème et vous continuez à chercher je sais pas quoi ...

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

Discussions similaires

  1. [Debutant VC++.net] Obtenir un pointeur sur objet
    Par SteelBox dans le forum MFC
    Réponses: 6
    Dernier message: 17/06/2004, 18h36
  2. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  3. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  4. [allegro]passage de pointeur sur image
    Par Gonath dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 13/12/2003, 18h47
  5. Declaration de fonction retournant un pointeur sur fonction
    Par pseudokifaitladifférence dans le forum C
    Réponses: 5
    Dernier message: 11/08/2003, 19h37

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