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

Langage C++ Discussion :

Pointeur sur tableau 2D


Sujet :

Langage C++

  1. #1
    Invité
    Invité(e)
    Par défaut Pointeur sur tableau 2D
    Bonjour,
    Comme vous avez pu le voir mon problème provient du fait que je souhaite réaliser un pointeur sur un tableau 2 dimensions.
    Et là ça bug impossible de le faire fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error: cannot convert `int (*)[5][1]' to `int**' in initialization
    et voici mon code complet :
    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
    #include <iostream>
     
    using namespace std;
    void fonction(int ** adresse);
    int test = 6;
    int * ptest = &test;
    int tableau[5][1];
    int ** ptableau = &tableau;
    int ** ptabl;
    int ** ptable;
     
    int main()
    {
        tableau[1][1] = 2;
        cout << "valeur par action direct : " << test <<endl;
        cout << "adresse : " << ptest << endl;
        cout << "valeur par pointeur : " << *ptest <<endl;
        cout << "Tableu normal : " << tableau[1][1]<<endl;
        cout << "adresse tableau : " << ptableau <<endl;
        cout << "valeur tableau : "<< ptableau[1][1] <<endl;
        ptabl = ptableau;
        cout << "adresse tableau par tbl : " << ptabl <<endl;
        cout << "valeur tableau par tbl : " << ptabl[1][1] <<endl;
        cout << "appelle fonction"<<endl;
        fonction(ptableau);
        return 0;
    }
     
    void fonction(int ** adresse)
    {
        cout << "dans la fonction" << endl;
        ptable = adresse;
        cout << "adresse table : " << adresse <<endl;
        cout << "valeur table : "<< adresse[1][1] <<endl;
    }
    Merci pour d'avance votre réponse.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 074
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 074
    Points : 12 120
    Points
    12 120
    Par défaut
    Vous utilisez déjà la STL, donc utilisez la class template vector.
    Ca sera bien plus simple.

  3. #3
    Membre actif
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    189
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 189
    Points : 213
    Points
    213
    Par défaut
    Attention! Le premier élément d'un tableau se trouve à l'indice 0 et non 1.

    Donc :
    devrait être au moins
    mais je suppose que c'est
    que tu voudrais.

  4. #4
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int **ptableau = &tableau;
    Un pointeur sur un pointeur n'est pas un pointeur sur un tableau
    On ne peu accéder aux tableaux 2D de la sorte.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci pour vos réponse
    Mon code étant donc complètement faux, auriez vous une solution pour appeler un tableau 2D dans une fonction, jusqu'à la cela semble simple mais je souhaite pouvoir changer le tableau que j’appelle (c'est pas clair )
    code faux juste pour la compréhension du problème :
    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
     
    #include <iostream>
     
    using namespace std;
    void fonction(int tableau);
    int tableau1[5][1];
    int tableau2[5][1];
    int tableau3[5][1];
    int choixuti;
     
    int main()
    {
       cout << "Choisissez votre tableau : " <<endl;
       cin >> choixuti;
       switch (choixuti)
       {
            case 1:
            fonction(tableau1);
            break;
            case 2:
            fonction(tableau2);
            break;
            case 3:
            fonction(tableau3);
            break;
       }
    }
     
    void fonction(int tableau)
    {
        //Partie complètement fausse puisqu'on ne peut appeler un tableau avec une variable
        cout << tableau[1][0] <<endl;
        //'tableau' n'est pas le nom d'un tableau mais celui de la variable que je fais entrer dans la fonction, variable dont le contenu est le tableau choisi par l’utilisateur 
    }
    Merci d'avance pour votre aide

  6. #6
    En attente de confirmation mail

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    1 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 391
    Points : 3 311
    Points
    3 311
    Par défaut
    Tu peus utiliser les template pour matcher le paramètre avec un tableau à 2 dimensions, ca te permet de récupérer les tailles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    template<size_t N, size_t M>
    void foo(int (&tab)[N][M]) {}

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(int tableau[][1]);

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void fonction(int tableau[][1])
    {
        cout << tableau[1][0] <<endl;    
    }
    Code valable que pour des tableaux de tableaux de dimension 1
    Attention à ne pas sortir des bornes du tableau (passer sa dimension comme paramètre à la fonction)

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Les 3 lignes suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    int tableau1[5][1];
    int tableau2[5][1];
    int tableau3[5][1];
    veulent dire :"Je déclare 3 objets nommé tableau1, tableau2 et tableau3. Ces objets sont des tableaux. Chaque tableau contient 5 éléments. Chacun de ces 5 élément contient une valeur. Donc l'espace occupé par un tableau sera 5 * sizeof(int)
    La représentation pourrait être décrite ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    tableau[0][0] 
    tableau[1][0] 
    tableau[2][0] 
    tableau[3][0] 
    tableau[4][0] 
    //Cela serait la même chose que
    int TAB[5];
    TAB[0] TAB[1] TAB[2] TAB[3] TAB[4]

  9. #9
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Regarde du coté de boost::multi_array.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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. [Debutant] Pointeur sur tableau
    Par Pahcixam dans le forum Débuter
    Réponses: 7
    Dernier message: 25/05/2007, 21h19
  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