Tableau à deux dimensions C
Scipion
-
arthurc Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
arthurc Messages postés 26 Date d'inscription Statut Membre Dernière intervention -
Bonjour, voilà mon problème :
J'ai une structure matrice avec 3 champs : int lines int columns et un dernier champ que j'aurai envie de définir int ** matrice;
Dans l'initialisation de ma strcture, si j'ai une matrice 3x3 voilà ce qui se passe :
j'initialise la structure, et les deux premiers champs.
Cependant si j'ai une matrice 3x3 que j'ai rempli préalablement je n'arrive pas à faire ceci :
int a [3][3];
/* Allocation + init des valeurs */
si j'ai un pointeur vers ma struct disons m;
m->matrice = a;
Cependant cette opération ne marche pas. Comment puis-je réussir à faire cela ? je ne peux pas dans ma struct faire : int tab[lines][columns] donc je ne vois pas très bien comment faire ...
J'ai une structure matrice avec 3 champs : int lines int columns et un dernier champ que j'aurai envie de définir int ** matrice;
Dans l'initialisation de ma strcture, si j'ai une matrice 3x3 voilà ce qui se passe :
j'initialise la structure, et les deux premiers champs.
Cependant si j'ai une matrice 3x3 que j'ai rempli préalablement je n'arrive pas à faire ceci :
int a [3][3];
/* Allocation + init des valeurs */
si j'ai un pointeur vers ma struct disons m;
m->matrice = a;
Cependant cette opération ne marche pas. Comment puis-je réussir à faire cela ? je ne peux pas dans ma struct faire : int tab[lines][columns] donc je ne vois pas très bien comment faire ...
A voir également:
- Tableau à deux dimensions C
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Imprimer tableau excel sur une page - Guide
1 réponse
Bonjour,
ton int a[3][3] est local à ta fonction où tu initialises.
Tu ne peux pas pointer dessus et ensuite t'en servir dans d'autre fonctions.
pour initialiser je ferais ainsi avec size la taille de matrice
le permier malloc sert à initaliser 3 cases de pointeur sur entier, le malloc du for sert à initialiser une case de int pour chacune des cases.
ton int a[3][3] est local à ta fonction où tu initialises.
Tu ne peux pas pointer dessus et ensuite t'en servir dans d'autre fonctions.
pour initialiser je ferais ainsi avec size la taille de matrice
size = 3; m->matrice = (int *) malloc (sizeof (int *) * size); for (i = 0; i < size; ++i){ m->matrice[i] = (int)malloc (sizeof(int) * size); }
le permier malloc sert à initaliser 3 cases de pointeur sur entier, le malloc du for sert à initialiser une case de int pour chacune des cases.