Initialisation d'une matrice carrée (malloc...)
Coucou :D
Voilà, je me demande qq chose au sujet d'une fonction d'initialisation de matrice carrée...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
int **init(int n)
{
int i,j;
int **T = malloc(n*sizeof(int *));
if (!T) exit(0);
for (i=0;i<n;i++)
{
T[i] = malloc(n*sizeof(int));
if (!T[i]) exit(0);
}
for (i=0;i<n;i++)
for (j=O;j<n;i++) T[i][j] = 0;
return T;
} |
Ma question porte sur le premier malloc : a quoi correspond le (int *) ?
Et on ne peut pas faire un int **T = malloc (n*n*sizeof(int)) ? (allouer la place pour la matrice carrée n )
ha et aussi, il ne faut pas faire un cast qd on fait un malloc ? Du genre :
T[i] = (int *) malloc (n*sizeof (int));
Merci bcp :D
Re: Initialisation d'une matrice carrée (malloc...)
Citation:
Envoyé par kilinette
Voilà, je me demande qq chose au sujet d'une fonction d'initialisation de matrice carrée...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
int **init(int n)
{
int i,j;
int **T = malloc(n*sizeof(int *));
if (!T) exit(0);
for (i=0;i<n;i++)
{
T[i] = malloc(n*sizeof(int));
if (!T[i]) exit(0);
}
for (i=0;i<n;i++)
for (j=O;j<n;i++) T[i][j] = 0; |
C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
Citation:
Ma question porte sur le premier malloc : a quoi correspond le (int *) ?
La première allocation concerne la creéation d'un tableau de n pointeurs.
Citation:
Et on ne peut pas faire un int **T = malloc (n*n*sizeof(int)) ? (allouer la place pour la matrice carrée n )
Non. On ne sait pas définir de type souple en C qui correspondrait à un tableau lineaire (monolithique). Soit on crée un tableau a une dimension,
Code:
T * tab = malloc (n * n * sizeof *tab);
et on y accède par une fonction qui calcule l'index de l'objet en fonction des index i et j et de n, soit on fait un tableau de n pointeurs sur des tableaux de n T, ce qui est l'exemple donné.
Citation:
ha et aussi, il ne faut pas faire un cast qd on fait un malloc ? Du genre :
T[i] = (int *) malloc (n*sizeof (int));
La question est plutôt 'pourquoi le faire' ?
http://emmanuel-delahaye.developpez....tes.htm#malloc
Re: Initialisation d'une matrice carrée (malloc...)
Citation:
C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
Ben je l'ai tapé à partir d'un algo écrit sur une de mes feuilles, difficile de copier/coller, c'est une coquille du coup :P
Code:
1 2
|
int **T = malloc(n*sizeof(int *)); |
En fait je ne le comprends pas ce malloc :oops: Le sizeof(int *) veut dire quoi ?
Re: Initialisation d'une matrice carrée (malloc...)
Citation:
Envoyé par kilinette
Citation:
C'est pas O, mais 0. Attention, il fauut copier/coller et non recopier...
Ben je l'ai tapé à partir d'un algo écrit sur une de mes feuilles, difficile de copier/coller, c'est une coquille du coup :P
:sm:
Citation:
Code:
1 2
|
int **T = malloc(n*sizeof(int *)); |
En fait je ne le comprends pas ce malloc :oops: Le sizeof(int *) veut dire quoi ?
(int *) est un type "pointeur sur int". sizeof (int*) retourne la taille d'un pointeur de ce type. La ligne d'instruction crée un tableau de n pointeurs sur int.