Bonjour,
j'ai une matrice a[m][n] , quand je fais (int*)a , qu'est ce qui se passe?
merci
Bonjour,
j'ai une matrice a[m][n] , quand je fais (int*)a , qu'est ce qui se passe?
merci
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 :
Voila j'ai pas test mais normalement ca fonctionne
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;
Ceci dit je te conseil de faire un objet qui gere automatiquement tes tableaux et de reviser les pointeurs :p
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 }
si t'as un int** tu as un tableau de pointeur, chaque pointeur dans ce tableau pointant alors sur un tableau.
la valeur de tab est un poiteur (pointant sur la premiere case d'un tableau de pointeur)
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[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 !
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?tab2d est un tableau 2 dimensions d'int !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 int** tab2d; int* tab1d = (int*)tab2d;
tab1d est un tableau 1 dimension de pointeurs ...
Partager