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 en argument d'un tableau statique à 3 dimensions


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Points : 71
    Points
    71
    Par défaut Passage en argument d'un tableau statique à 3 dimensions
    Bonjour,

    Tout est dans le titre ou presque... J'ai cherché sur la toile et les forum en vain, je n'ai pas trouvé ma réponse...
    Mon tableau est assez petit tab[31][6][4]
    J'ai essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ma_fonction(int ***);
     
    void ma_fonction(int ***tab)
    {
    }
    mais ça ne fonctionne pas

    Merci de m'éclairez de vos lumières !!!

  2. #2
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    un tableau n'est pas un pointeur.
    Pour passer sereinement des tableau en aprametres, utilsiez boost::array

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Points : 71
    Points
    71
    Par défaut
    Je souhaiterais que ça fonctionne également en C, si possible merci !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Points : 71
    Points
    71
    Par défaut Trouvé !
    Avec l'aide d'un ami,

    il faut faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void ma_fonction(int tab[][taille2][taille3])
    taille2 et taille3 sont les dimensions correspondantes.

    Bonne soirée,

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2010
    Messages : 43
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Joel F Voir le message
    un tableau n'est pas un pointeur.
    Pour passer sereinement des tableau en aprametres, utilsiez boost::array
    En utilisant la stl C++ les vector les deques et les lists (le fait de choisir entre les 3 dépend de l'utilisation)marchent très bien aussi pour le passage en paramètre par référence. Sans avoir a installer la librairie boost.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour
    boost::array est un tableau statique et non pas dynamique, il n'est donc pas utilisé au même endroit que les vecteurs.
    Pour revenir au problème de base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void tableau1D(int *);
     
    void tableau1D(int *tab)
    {
       tab[3];
    }
    Le pointeur est ici équivalent à l'adresse ou debute le tableau et tab[3] est équivalent à *(tab+3);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void tableau3D(int ***);
     
    void tableau3D(int ***tab)
    {
       tab[3][2][4];
    }
    Le pointeur pointe là sur le pointeur qui pointe sur l'adresse ou debute le tableau et ce code est équivalent à *(*(*(tab+3)+2)+4). Si jamais ca compile, ça devrait faire une belle segfault.
    Il faut donc prendre l'adresse ou debute le tableau(comme dans le premier exemple) mais obtenir la valeur *(tab+3+2*taille2+4*taille3) c'est à dire avec tab[3+2*taille2+4*taille3]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void tableau3D(int *);
     
    void tableau3D(int *tab)
    {
       tab[3+2*taille2+4*taille];
    }
    Ce que tu fais est aussi possible,mais il faut connaitre la taille à la compilation. Mais pourquoi vouloir que du C++ fonctionne avec du C ?

  7. #7
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    Citation Envoyé par Koemgun Voir le message
    En utilisant la stl C++ les vector les deques et les lists (le fait de choisir entre les 3 dépend de l'utilisation)marchent très bien aussi pour le passage en paramètre par référence. Sans avoir a installer la librairie boost.
    sauf qu'on parle de tableau *statique*

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/12/2009, 10h46
  2. passage d'un tableau statique à un dynamique
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 13/09/2009, 23h08
  3. Réponses: 5
    Dernier message: 02/05/2009, 15h27
  4. Librairie statique C et passage d'arguments
    Par guepe dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/11/2007, 07h08
  5. Réponses: 13
    Dernier message: 13/10/2005, 16h03

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