Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1613 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Pointeur vers un tableau multi dimensionnel de taille variable

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pointeur vers un tableau multi dimensionnel de taille variable

n°1489170
limpkin
C'est subjectif.
Posté le 10-12-2006 à 11:18:33  profilanswer
 

Hello tout le monde!  
 
Après des heures de recherche sur le net, je viens demander de l'aide ici:
 
Dans mon programme C, à l'intérieur d'une fonction j'ai des tableaux de taille

Code :
  1. int fd_in[nb_banques][2];


 
Il est important de savoir que nb_banques est determiné par un parametre extérieur à la fonction que je recupère.
 
Voila mon probleme: je dois passer plusieurs de ces tableaux en paramètre à un thread donc je dois passer à mon thread un pointeur.
 
Voici les solutions que j'ai essayé:
 
- 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
- Dans ma struct définir un int*** qui pointerait vers mon tableau >> incompatible pointer type
 
Avez vous des idées? Merci

mood
Publicité
Posté le 10-12-2006 à 11:18:33  profilanswer
 

n°1489217
Sve@r
Posté le 10-12-2006 à 14:53:18  profilanswer
 

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

int i[10]


i est bien un pointeur sur un "int" autrement dit un "int *"
 
En revanche, dans un tableau à 2 ou plusieurs dimensions, style

int i[5][10]


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.
n°1489249
limpkin
C'est subjectif.
Posté le 10-12-2006 à 17:05:15  profilanswer
 

Merci, j'ai résolu le probleme en utilisant donc des calloc :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Pointeur vers un tableau multi dimensionnel de taille variable

 

Sujets relatifs
recuperer aleatoirement des donnees d'un tableau [RESOLU]Tableau dynamique dans une structure
Tableau à commencer à l'indice 0Etat sous forme de Tableau
Trier un tableau ...php5 xslt et variable
changement variabletaille ouverture fenêtre
[Résolu] JDBC Taille memoire des resultsetForcer la taille d'un div
Plus de sujets relatifs à : Pointeur vers un tableau multi dimensionnel de taille variable


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR