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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 ?

+ 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