question passage d'un tableau a plusieurs dim en parametre [C] - C - Programmation
Marsh Posté le 14-12-2005 à 12:43:07
Bonjour
Comme paramètre, il est possible d'envoyer une valeur ou un pointeur.
Il est tout à fait possible d'envoyer un pointeur sur un tableau à deux dimensions en considérant qu'il s'agit d'un tableau de pointeur sur des tableau à une dimension.
void initialiserpoids (float **poids) devrait mieux convenir.
déclarer un tableau de float et pointer dessus en considérant que c'est des int devrait normalement provoquer une erreur à la compilation ou au moins un clignotant.
Marsh Posté le 14-12-2005 à 14:21:59
De toute manière tu devrais faire int **poids et non int *poids. Et meme ca, ca ne marcherait pas. Tu ne peux pas passer un tableau a deux dimensions en C sans lui dire au moins combien fait la largeur de ton tableau. Je crois que c'est du au fait que quand ton tableau est a une dimension, le compilateur y accede par
Code :
|
c'est a dire qu'il va se décaler de i dans les cases memoires à partir du début de ton tablo.
En revanche, lorsque ton tableau est a deux dimensions, le compilateur accede aux elements de ton tablo tab[i][j] par
Code :
|
où j est l'index des colonnes, i celui des lignes, et sx est la largeur de ton tableau. C'est pourquoi il lui faut connaitre sx : s'il veut acceder au deuxième element de la troisième lignes par exemple, le compilateur doit d'abord se décaler de sx*3 cases (donc trois lignes), puis se déplacer de deux. Donc en fait je crois que ta fonction devrait etre, si tu veux rester en tableaux :
Code :
|
les pros du C ici, dont je ne fais pas partie, te dirons sans doute si je t'ai dis une enorme connerie , mais je crois pas (enfin j'espere pas). Au fait si tu passes un tablo de float, ta fonction serait mieux en float comme je l'ai ecrit.
Marsh Posté le 14-12-2005 à 15:47:35
in_your_phion a écrit : De toute manière tu devrais faire int **poids et non int *poids. Et meme ca, ca ne marcherait pas. Tu ne peux pas passer un tableau a deux dimensions en C sans lui dire au moins combien fait la largeur de ton tableau. Je crois que c'est du au fait que quand ton tableau est a une dimension, le compilateur y accede par
|
Excellent - T'as tout à fait compris le pb du décalage des lignes.
Pour résumer, quand on a un tableau à "n" dimensions à passer à une fonction, on est obligé de lui spécifier les tailles des "n -1" dernières dimensions et on peut remplacer la 1ère par un "*"
Ex: si tu as un "int tab[10][100][1000]" et que tu passes "tab" à ta fonction, ta fonction recevras un "int *pt[100][1000]
Marsh Posté le 14-12-2005 à 19:12:10
Ben oui, il faut les dimensions (on peut néanmoins omettre la plus à gauche);
void initialiserpoids(float poids[TAILLE*TAILLE][NBLETTRES]) |
ou
void initialiserpoids(float poids[][NBLETTRES]) |
Marsh Posté le 14-12-2005 à 19:16:30
db__ a écrit : Comme paramètre, il est possible d'envoyer une valeur ou un pointeur. |
Pas clair. En C, il n'y a que des valeurs... Une adresse est une valeur comme une autre.
Citation : Il est tout à fait possible d'envoyer un pointeur sur un tableau à deux dimensions en considérant qu'il s'agit d'un tableau de pointeur sur des tableau à une dimension. |
Ah oui, t'as essayé ? Marche pas du tout dans ce cas là. Comment la fonction pourrait-elle calculer les déplacements ? On est dans le cas d'un tableau plat à 2 dimensions, pas d'un tableau de tableaux...
Marsh Posté le 15-12-2005 à 10:31:51
Le C impose de donné la taille de 2e dimension (et suivante je pense dans le cas général) du tableau dans la signature, y'a rien de plus et c'est tout.
Marsh Posté le 15-12-2005 à 12:42:10
Sve@r a écrit : Excellent - T'as tout à fait compris le pb du décalage des lignes. |
oh yeah
Marsh Posté le 14-12-2005 à 11:57:16
bonjour,
j'aimerais faire ceci
main()
{
float poids[TAILLE*TAILLE][NBLETTRES];
initialiserpoids(poids);
}
avec comme fonction
void initialiserpoids(int *poids)
{
blablabla...
}
or j'ai un message d'erreur a l appel de la fonction initialiser poids, message derreur que je n'est pas si poids est a une dimension.
On ne peut pas mettre un tableau en deux dimensions en parametres?