Appel de fonction dans fonction : PROBLEME!

Appel de fonction dans fonction : PROBLEME! - C - Programmation

Marsh Posté le 05-03-2013 à 18:41:43    

Bonjour a tous,
J'ai un problème lors de l'appel d'une fonction("fct1" ) C dans une autre fonction ("fct2" ) C.
 
La fonction (1) me retourne un tableau (dont la taille ne m'est pas connue)
La fonction (2) doit se servir de ce tableau pour des calculs.
 
Je ne sais pas comment faire;

Code :
  1. double tab_fct1[];
  2. tab_fct1 = fct2(a,b);


 
Ne marche pas :(
Des idées??
Merci merci
++
Nane

Reply

Marsh Posté le 05-03-2013 à 18:41:43   

Reply

Marsh Posté le 05-03-2013 à 18:55:05    

Quand on a un tableau dont la taille n'est pas connue, cela veut dire qu'on va probablement utiliser un pointeur pour accéder au contenu du tableau.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-03-2013 à 19:24:03    

Re,
Ok pour le pointeur (pour accéder au contenu) mais il faut bien que j'attribue un tableau au résultat de ma fonction ?

Reply

Marsh Posté le 05-03-2013 à 19:39:58    

naneba2 a écrit :

Re,
Ok pour le pointeur (pour accéder au contenu) mais il faut bien que j'attribue un tableau au résultat de ma fonction ?


 
En général, on utilise un pointeur sur le premier élément du tableau quand dans ce genre de situation.
D'ailleurs, même quand tu définis une fonction qui prend un argument de type tableau, ton compilateur te cache le fait que c'est seulement un pointeur vers le premier élément qui est transmis ... Mais dans la pratique, c'est ce qui se passe.


---------------
last.fm
Reply

Marsh Posté le 05-03-2013 à 23:30:55    

naneba2 a écrit :

Re,
Ok pour le pointeur (pour accéder au contenu) mais il faut bien que j'attribue un tableau au résultat de ma fonction ?

Par pointeur on a dit

Code :
  1. machin *ma_fonction(truc, nb_de_machin) {
  2.   // on alloue un tableau de nb_de_machin machin
  3.   machin *les_machins = malloc(nb_de_machin * sizeof(machin));
  4.   // on fait qque chose avec truc et les_machins
  5.   ...
  6.   // on retourne le tableau alloué
  7.   return les_machins;
  8. }


 
A+,


Message édité par gilou le 05-03-2013 à 23:33:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 06-03-2013 à 15:50:06    

Merci beaucoup!

Reply

Marsh Posté le 07-03-2013 à 08:52:52    

Salut
 
Pour faire suite au post de gilou, tu utilises le pointeur retourné exactement comme un tableau
 

Code :
  1. void fct()
  2. {
  3.     machin *tab;
  4.     int i;
  5.     tab=ma_fonction(truc, 512);
  6.     for (i=0; i < 512; i++)
  7.         printf("machin[%d]=%s\n", i, tab[i]);
  8.     // Tu peux aussi, comme pour tout tableau, utiliser un second pointeur ce qui évite l'indexation [i]
  9.     machin *pt;
  10.     for (i=0, pt=tab; i < 512; i++, pt++)
  11.         printf("machin[%d]=%s\n", i, *pt);
  12.     // Surtout ne pas oublier de libérer le tableau en fin de travail
  13.     // Car la fonction l'a allouée via malloc()
  14.     free(tab);
  15. }


Message édité par Sve@r le 07-03-2013 à 08:55:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed