La première écriture :
double MatSimple[TAILLE_L][TAILLE_C]; /*Matrice simple à traiter*/
est une zone contigüe en mémoire, l'adresse de chaque case pouvant être calculé comme étant un tableau à une dimension :
MatSimple[i][j] == MatSimple1D[i*TAILLE_C + j]
C'est donc un calcul arithmétique qui permet d'obtenir la bonne case...
La 2ème écriture :
1 2
|
int AffMatSimple(double **, int, int); |
Dit qu'on a un pointeur de pointeurs... Donc pas forcément une zone contigüe. La première dimension étant un pointeur qui va nous donner l'adresse de la ligne de la 2ème dimension.
Pour obtenir l'adresse de la case (i,j), on doit donc obtenir l'adresse contenu dans la case MatSimple[i]. Ceci nous donne le début de la i-ème ligne et on ira à la j-ème case pour obtenir la case voulue.
Pour obtenir la valeur de la case, on doit donc faire une indirection en mémorie...
C'est donc vraiment différent comme approche et en se mélangeant les deux, le compilateur va faire les mauvais calculs, ce qui provoquera une erreur...
Jc
Partager