|
|
|
|
C : structure matrices
Salut tout le monde!
Je voulais savoir, quand on cree une structure telle que :
typedef struct
{
int* m; //matrice
int taille; //nb de colonne de la matrice
} T_carre;
par exemple
et qu'on veut ensuite dans une fonction utiliser la matrice de T_carre dans un printf par exemple...
Que dois je ecrire car vu que c'est defini comme un pointeur :
moncarre.m[i] ne semble pas marcher...
void afficher_matrice (T_carre moncarre)
{
int i;
for (i=0;i<(moncarre.taille*moncarre.taille);i++)
{printf("%d ",moncarre.m[i]);
if (i!=0 && (i+1)%(moncarre.taille)==0) {printf("\n");} //les retours a la lignes
}
}
merci de m'avoir lu
Configuration: Windows 2000 Internet Explorer 6.0
L'idée
char c = 'x'; char *pc = &c; ... soit un objet que tu alloues (et qu'il faudra désallouer avec un free). Par exemple pour allouer une plage en mémoire de n objet de type plop contigus en mémoire on tape : plop *p=(plop *)malloc(n*sizeof(plop)); ... // Quand je n'ai plus besoin de p : free(p); A noter que calloc met toute la plage mémoire à 0. La réponse à ton problème Ok maintenant intéressons nous à l'allocation :
#include <stdio.h>
#include <stdlib.h>
struct matrix_t{
unsigned int nb_ligne;
unsigned int nb_colonne;
int **data;
};
struct matrix_t
new_matrix(unsigned int nb_ligne0,unsigned int nb_colonne0){
struct matrix_t m;
unsigned int i;
m.nb_ligne = nb_ligne0;
m.nb_colonne = nb_colonne0;
m.data = (int**)malloc(nb_ligne*sizeof(int *));
for(i=0;i<nb_ligne;++i){
// je mets les cases à 0 grâce au calloc
m.data[i] = (int *)calloc(nb_colonne,sizeof(int));
}
return m;
}
void delete_matrix(matrix * m){
unsigned int i;
for(i=0;i<m.nb_ligne;++i) free(m.data[i]);
free(m.data);
free(m);
}
Ok il ne reste plus qu'à accedér à l'élément (i,j) :
void set(struct matrix_t m,unsigned int ligne,unsigned int colonne,int val){
if (ligne >= m.nb_ligne){
fprintf(stderr,"set : out of range\n");
return;
}
if (colonne >= m.nb_colonne){
fprintf(stderr,"set : out of range\n");
return;
}
m.data[ligne][colonne] = value;
}
void get(struct matrix_t m,unsigned int ligne,unsigned int colonne,int val){
if (ligne >= m.nb_ligne){
fprintf(stderr,"get : out of range\n");
return;
}
if (colonne >= m.nb_colonne){
fprintf(stderr,"get : out of range\n");
return;
}
return m.data[ligne][colonne];
}
En espérant t'avoir éclairé... Bonne chance |