|Résolut]Tableau dynamique en C
Forum Programmation : |Résolut]Tableau dynamique en C
TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !
Bonjour!
Je suis un peu en galère pour crer un tableau dynamique en 2D en C.
Voilà comment je procède:
Code :
|
Et là le compilateur me dit:
| Citation : prog2.c: In function âmainâ:
|
(désoler il y a un problème d'encodage)
J'ai chercher sur google mais pas trouver grand chose de concluant!
Petite question:
A quoi sert le (int*) avant le malloc ?
Merci de votre aide!
ligne 8 essaye plutot un sizeof a la place du sizeor
en general ça marche mieux après
Si tu veux faire une matrice, pourquoi tu commence par déclarer 1 tableau à 1 dimension ?
Vermoute a écrit :
|
Soit :
Code :
|
Pour allouer ta matrice, il faut donc faire :
Code :
|
On rajoute un petit test pour vérifier que la matrice à bien été alloué :
Code :
|
On va ensuite allouer le reste de la matrice :
Code :
|
Ensuite, tu peux remplir comme tu le souhaites !
Donc, petit récapitulatif :
Code :
|
| Vermoute a écrit : A quoi sert le (int*) avant le malloc ? |
T'as appris le C ? C'est un cast ! La fonction malloc retourne le type de base ( void* ) .
| totof59 a écrit : ligne 8 essaye plutot un sizeof a la place du sizeor |
Petite faute de frappes sans importance, son programme est erroné de toute façon !
Il veut un tableau à deux dimensions, et il initialise le sien en 1 dimension ... Ça marchera jamais !
| Vermoute a écrit : un tableau dynamique en 2D en C. |
un tableau 2D = matrice !
Ok j'ai compris le truc!
En faite s'était juste des problème d'étoile dans mon code.
Comme ça ça marche:
Code :
|
Par contre il y a un truc que je n'ai pas compris:
p[i][j] par exemple, ce n'est pas une adresse ?
Parce qu'un printf me le prend que comme ça, pas d'étoile ?
Si je me trompe pas
p[i][j] te renvoie un int
donc il faut taper
printf("%d",p[i][j]);
Oui j'ai constater ça mais je trouve ça bizard!
si on a:
int *p;
p=(int*)malloc(sizeof(int);
p est une adresse et *p un entier !
p[ i ] (contenu du ième élément de p) est équivalent à *(p + i) (adresse décalée de i, et on prend le contenu)
donc l'utilisation des opérateur [] prend bien le contenu. Pour ton problème p[ i ][ j ] est équivalent à (*(p + i))[ j ] équivalent à *(*(p + i) + j) p étant en fait ici un tableau de pointeurs pointant sur des tableaux à 1 dimension.
Ok! Merci
!
Il y a 1364 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
