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 :

conversion d'une matrice de taille m*n en un tableau uniligne de taille m*n


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 56
    Par défaut conversion d'une matrice de taille m*n en un tableau uniligne de taille m*n
    Bonjour,

    j'ai une matrice a[m][n] , quand je fais (int*)a , qu'est ce qui se passe?

    merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Tu te retrouve avec un tableau de pointeur.

    Autrement dit pas du tout ce que tu veux faire.

    pour ce que tu veux faire c'est un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int*	tab = new int[m * n + 1];
    int	total_index = 0;
     
    for (int i = 0; i < m; ++i)
    {
    	for (int ibis = 0; ibis < n; ++ibis)
    	{
    		tab[total_index] = a[i][ibis];
    		++total_index;
    	}
    }
    tab[total_index] = NULL;
    Voila j'ai pas test mais normalement ca fonctionne

    Ceci dit je te conseil de faire un objet qui gere automatiquement tes tableaux et de reviser les pointeurs :p

  3. #3
    screetch
    Invité(e)
    Par défaut
    non non non c'est pas un tableau de pointeurs, c'est un tableau de tableaux
    a[m][n] est représenté contigu en mémoire et si on le transforme en (int*) alors on obtient les lignes ou les colonnes a la suite les unes des autres (j'ai jamais su si c'etait les lignes ou les colonnes, quelqu'un de plus calé pourra te dire)
    je crois que c'est les lignes a la suite les unes des autres

    si m=n=2, et que la matrice a vaut a = { { 0, 1 }, { 2, 3 } }
    alors si on caste a en int* : b = (int*)a alors b sera un tablea de 4 éléments
    b = { 0, 1, 2, 3 }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    si t'as un int** tu as un tableau de pointeur, chaque pointeur dans ce tableau pointant alors sur un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int** tab;
     
    (tab)--->(tab[0],       tab[1],      tab[2] ...)
                 |            |           |
                 V            V           V
              (tab[0][0]) (tab[1][0]) (tab[2][0])
              (tab[0][1]) (tab[1][1]) (tab[2][1])
              (tab[0][2]) (tab[1][2]) (tab[2][2])
    la valeur de tab est un poiteur (pointant sur la premiere case d'un tableau de pointeur)
    la valeur de tab[n] est un pointeur (pointant sur la premiere case d'un tableau d'int)
    la baleur de tab[n][m] est un int

    Donc caster un int** en in int* revient a avoir un tableau de pointeur !

    Autrement dit c'est totalement inutile !

  5. #5
    screetch
    Invité(e)
    Par défaut
    a[m][n] est un tableau de tableau ici, pas un tableau de pointeurs

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 56
    Par défaut
    Citation Envoyé par screetch Voir le message
    a[m][n] est un tableau de tableau ici, pas un tableau de pointeurs
    La question etant :

    quand je fais (int*)a , qu'est ce qui se passe?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int** tab2d; 
     
    int* tab1d = (int*)tab2d;
    tab2d est un tableau 2 dimensions d'int !
    tab1d est un tableau 1 dimension de pointeurs ...

Discussions similaires

  1. Conversion d'une matrice en tableau de cellules
    Par wawrint dans le forum MATLAB
    Réponses: 2
    Dernier message: 03/06/2008, 14h55
  2. Réponses: 2
    Dernier message: 26/06/2007, 15h40
  3. Réponses: 4
    Dernier message: 06/06/2007, 13h32
  4. Réponses: 4
    Dernier message: 05/05/2007, 19h12
  5. taille du browser adaptée à un tableau dont la taille varie
    Par grinder59 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/01/2006, 12h46

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