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 :

C++ Problème de fonctions et pointeurs


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut C++ Problème de fonctions et pointeurs
    salut

    je souhaiterais implementer ce bout de code dans une fonction:

    double **grad_vert = new double * [image.height];
    for(i=0;i<image.height;i++){
    grad_vert[i] = new double[image.width];
    }

    j'ai donc créé une fonction dont le prototype est:
    double** creer_tableau(int,int);
    et le corps:
    double** creer_tableau(int width,int height)
    {
    double **tableau = new double * [height];
    for(int i=0;i<height;i++){
    tableau[i] = new double[width];
    return **tableau;
    }
    }
    et quand j'appelle la fonciton je fais:
    grad_vert=creer_tableau(image.width,image.height);
    je pense que je me suis trompé dans mes pointeurs car le compilateur me dit qu'il ne peut pas convertir un double en double** a la ligne 'return **tableau;'
    si vous pouvez m'aider...
    et aussi si vous pouvez m'expliquer exactement les role des pointeurs ici car j'ai du mal a comprendre tout
    thanx!

  2. #2
    Fry
    Fry est déconnecté
    Membre régulier Avatar de Fry
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    150
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 150
    Points : 119
    Points
    119
    Par défaut
    ton code ressemble plutot a du C et je crois qu'en generale il vaut mieux eviter les **
    Mais a mon avis si tu fait ca ca devrait etre bon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    double** creer_tableau(int width,int height)
    {
    double **tableau = new double * [height];
    for(int i=0;i<height;i++){
    tableau[i] = new double[width];
    return tableau;
    }
    }
    parcque en fait en rajoutant ** tu dereferencait ton pointeur et renvoyait effectivement un double

    Et tes pointeur te permette de creer un tableau a 2 dimension:

    double **tab; equivaut a double[x][y]; mais te permet d'allouer ton tableau de maniere dynamique

  3. #3
    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
    double** creer_tableau(int width,int height) 
    { 
       double **tableau = new double * [height]; 
       for(int i=0;i<height;i++)
            tableau[i] = new double[width]; 
      return tableau;  
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double **tableau = new double * [height];
    Crée un tableau de pointeur sur double et met son adresse dans tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for(int i=0;i<height;i++)
              tableau[i] = new double[width];
    Crée des tableaux de double et met leur adresse dans chaque élément du tableau de pointeur sur double. Attention, une erreur de } dans le code original
    renvoie la valeur du pointeur sur l'ensemble de la structure de données. return ** tableau renvoie le premier élément double du premier tableau tableau[0][0]
    Ce type de code a l'avantage de ne créer que des tableaux à une dimension ce qui les rends plus faciles à traiter en cas de passage en paramètre de fonction puisqu'il n'est pas nécessaire de spécifier leur dimension. De plus , ceci permet d'utiliser la syntaxe tableau[][]. Le prix à payer est un tableau de pointeurs supplémentaires.
    Accessoirement, si tu n'as pas l'intention de modifier individuellement la longueur des tableaux de double, il est plus simple pour le delete d'allouer directement un seul grand tableau de double. Si tu veux plus de détails, dis le.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 85
    Points : 49
    Points
    49
    Par défaut ca marche!
    super ca marche!
    merci pour l'aide et les explication!

Discussions similaires

  1. problème de fonction avec des pointeurs
    Par bl4cksky dans le forum Débuter
    Réponses: 16
    Dernier message: 09/09/2013, 12h28
  2. Réponses: 13
    Dernier message: 21/03/2009, 20h49
  3. Problème fonction et pointeurs
    Par lowwa132 dans le forum Débuter
    Réponses: 10
    Dernier message: 14/12/2008, 18h45
  4. Réponses: 11
    Dernier message: 25/03/2008, 23h12
  5. Petits problème de fonction et de pointeur
    Par markipoli dans le forum Débuter
    Réponses: 3
    Dernier message: 19/11/2007, 17h42

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