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 :

assigner un tableau 2D sur un pointeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut assigner un tableau 2D sur un pointeur
    ce problème m'avait l'air idiot quand je me le suis posé, mais quand j'ai voulu le réaliser, c 'est moi qui avait l'air idiot ...

    donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char tableau [30] [50];
     
    char ** pointeur;
     
    pointeur = tableau;
    passe pas ....

    cannot convert 'char (*)[50]' to 'char**'

    l'idée étant de passer par un pointeur où je ne suis pas obligé de spécifier le nombre d'éléménts et de pouvoir y acceder
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char * texte = pointeur [5];
     
    char car = pointeur [5][10];
    j'ai tout essayé ... sauf la bonne réponse (si il y en a une)

  2. #2
    Expert confirmé
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char tableau [30] [50];
    char ** pointeur; 
    pointeur = tableau;
    Le type de pointeur ne peut être char ** . Il doit être du type de tableau (à l'évaluation) soit " adresse d'un élément de tableau". Les éléments de tableau sont ici des char[50] et le type de pointeur est alors char (*)[50] (avec les parenthèses : pointeur sur un tableau de 50 char)

    Toutefois, utiliser ce type peut présenter des problèmes lors du passage du tableau en argument d'une fonction car alors la fonction est spécialisée pour des char [50] , il y a obligation de spécifier la dimension (50) et on ne peut la changer.
    Une autre possibilité est de "voir" le tableau sous une forme à une dimension. Dans cette optique, le tableau est vu comme un char [] et le type de pointeur sera char * , la dimension (50) est passée en argument (et la fonction peut travailler sur des tableaux dont la dimension est quelconque) mais c'est au programmeur de faire explicitement le calcul des indices
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char tableau [30] [50];
    char (*p1)[50] = tableau;
    char * pointeur = (char *) tableau; 
    ....
     
    tableau[i][j] <-> p1[i][j]
    tableau[i][j] <-> pointeur [ i*50+j]
    Enfin, une autre possibilité est de construire ce tableau à partir d'un tableau de pointeur sur char : char *[30], chaque pointeur contenant l'adresse d'un sous- tableau char [50]. Il n'intervient plus alors que des tableaux à une dimension. Le type de pointeur serait alors char ** et on peut accéder aux éléments comme d'habitude par pointeur [ i][j].
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char tab[30*50];
    char *tableau[30];
    char ** pointeur = tableau;
    for(i=0;i<30;i++) tableau[i] = tab+i*50;
    .....
    tableau[i][j] = ...; // ou
    pointeur[i][j] = ...;
    Voir la FAQ pour plus de détails.

  3. #3
    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
    Citation Envoyé par diogene
    Enfin, une autre possibilité est de construire ce tableau à partir d'un tableau de pointeur sur char : char *[30], ....
    Une autre possibilité est de construire un tableau à partir d'un tableau de pointeur sur char....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    char **Tableau ;
     
    Tableau = malloc ( 30*sizeof(char*) );
    ....
    for ( i = 0 ; i < 30 ; i++ )
        Tableau[i] = malloc ( 50 ) ;
     
    Tableau[i][j] = ....
    ...
    strcpy ( Tableau[i], "..." );
    ...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    impeccable

    ca c'est de la réponse comme je les aime

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    par contre, j'ai un autre problème maintenant ...

    comment on créer une fonction qui renvoi ce tableau ?

  6. #6
    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
    Procède logiquement :

    Comment créer une fonction qui renvoie un entier ?

    2 possibilités :

    ou bien


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void Fonction ( .... , int *toto )
    Donc .....

    A toi d'essayer... Pour apprendre c'est mieux...

    Note : une indication : en général dans ce cas, la 2ième forme est la plus utilisée...

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Par défaut
    je voudrais plutot une fonction qui me retourne le pointeur
    pour faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char (*pointeur) [50] = getTableau ();
    le prob, c'est que je ne sais pas comment déclarer la fonction getTableau ()

  8. #8
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Citation Envoyé par souviron34
    Procède logiquement :

    Comment créer une fonction qui renvoie un entier ?

    2 possibilités :
    En fait : 3 possibilités!

    En C++, il ne faut pas oublier le passage par référence...
    qui est mieux qu'un pointeur quand on peut l'utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void Fonction ( .... , int &toto )
    {
       toto = 3;
    }

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/11/2008, 18h58
  2. Dev c++ en rade sur les pointeurs ?...
    Par Magicien d'Oz dans le forum C
    Réponses: 17
    Dernier message: 13/10/2005, 19h38
  3. questions sur les pointeurs
    Par Hyoga dans le forum C++
    Réponses: 17
    Dernier message: 08/01/2005, 23h25
  4. [Debutant][Tableau] Tableau indexé sur chaine de caractères
    Par SamRay1024 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 07/05/2004, 11h14
  5. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50

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