limpkin a écrit :
Définir une struct avec à l'intérieur des tableau de taille variable >> On peut seulement définir un tableau de taille variable en fin de struct
|
Pas forcément. Tu peux définir dans ta structure un pointeur que tu alloues dynamiquement avec du malloc
limpkin a écrit :
- Dans ma struct définir un int*** qui pointerait vers mon tableau >> incompatible pointer type
|
C'est tout à fait normal. En C, un débutant qui aborde les pointeurs a généralement tendance à s'imaginer que "tableau = pointeur" car c'est parfois écrit ainsi dans les livres. Ce n'est pas tout à fait exact. Cela n'est vrai que dans le cas d'un tableau à une dimension
i est bien un pointeur sur un "int" autrement dit un "int *"
En revanche, dans un tableau à 2 ou plusieurs dimensions, style
On a "i" qui est un tableau de pointeurs sur des tableaux de 10 int, c'est à dire un "int*[10]" et non un "int **". Pourquoi ? parce que la mémoire n'est qu'une liste de cases mises en continu et ne fait donc qu'une seule dimension. Il en résulte que si tu veux aller à la position "i[x][y]", le C remplacera ça par un décalage de "x * 10 + y".
Donc si tu passes ce "i" à une fonction et que tu déclares dans ta fonction "f(int **i)"; la fonction ne saura pas quelle est la "largeur" du tableau et ne saura donc pas aller à l'emplacement "[x][y]". Pour que ça marche, soit tu déclares "f(int i[5][10])", sois tu déclares "f(int* i[10])". Dans tout les cas, il faut que la fonction sache que le tableau a une largeur de 10.
En résumé, quand tu passes un tableau à plusieurs dimensions à une fonction, tu n'as le droit dans ta fonction de remplacer que la première dimension par une étoile. Le C a besoin de toutes les autres dimensions pour faire ses calculs de déplacement.
Pour ton problème, tu peux très bien passer "fd_in" à ton thread. Mais dans ton thread, tu dois écrire que "fd_in" est de type "int* [2]"
Message édité par Sve@r le 10-12-2006 à 14:57:43
---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.