tableau en argument de fonction et pointeur de pointeur

tableau en argument de fonction et pointeur de pointeur - C - Programmation

Marsh Posté le 08-08-2008 à 15:48:26    

Bonjour,
 
j'ai une fonction principale Fprinc qui a pour argument un tableau de 20 float par exemple.
 
Ce tableau est modifié par une autre fonction appelée à l'intérieur de ma fonction principale. Je veux avoir accès aux valeurs des éléments du tableau depuis un autre programme qui va appeler Fprinc.
On m'a expliqé au sujet des arguments d'une fonction que ce n'était pas la peine d'utiliser des pointeurs sur des arguments non modifiés, par contre, il faut que j'utilise des pointeurs lorsque je souhaite modifier une variable passée en argument d'une fonction. Et on m'a dit que dans le cas de tableaux, il fallait utiliser un pointeur de pointeur...  
 
est-ce que quelqu'un pourrait m'expliquer à quoi ça ressemble la syntaxe de pointeur de pointeur dans le cas d'un tableau à modifier, passé en argument d'une fonction ? entre les **, les *, les &, je suis perdue... aussi bien dans l'appel de la fonction, que dans la définition des sous fonctions, que dans l'affectation de nouvelles valeurs aux éléments du tableau.
 
Je précise que j'ai pas mal planché dessus... j'ai essayé des choses comme (**Tableau), avec ou sans parenthèses, avec ou sans la taille du tableau... je pense qu'il me faut surtout un exemple très concret, avec appel d'une fonction, sa définition, son prototype, qui pourrait me faire récupérer la valeur des éléments du tableau.
 
merci d'avance


Message édité par Tipi470 le 08-08-2008 à 16:04:33
Reply

Marsh Posté le 08-08-2008 à 15:48:26   

Reply

Marsh Posté le 08-08-2008 à 16:11:50    

Il te faudrait je pense commencer par lire un cours de C.

Reply

Marsh Posté le 08-08-2008 à 16:20:17    

Je@nb a écrit :

Il te faudrait je pense commencer par lire un cours de C.


 
??? je ne pense pas que l'utilisation des pointeurs de pointeurs soient à ce point évidente... ce que j'avais codé au départ, c'est quelque chose comme ça:
 
void Fprinc ( float *Tableau )
{
    // ici j'appelle une fonction interne qui va faire des calculs sur mes éléments de tableau
    f_calc ( Tableau );
 }
 
void f_calc ( float *Tableau )
{
   for (i=0;i<Dim; i++) Tableau[i] = blalab;
}
 
ensuite, mon programme principal ressemblait à ça:
void F_Util ()
{
      float Tableau[Dim];
 
      Fprinc ( float Tableau[Dim] );
       
      // ici, faire un print des éléments du tableau montre qu'ils n'ont pas été affectés des valeurs données   dans f_calc
}
 
A ce stade, j'ai cru comprendre que justement, ce passage d'argument ne permettait pas de récupérer les valeurs du tableau. On m'a parlé des pointeurs de pointeurs, et après un grand nombre d'essai, je n'arrive pas à les mettre en oeuvre... maintenant, si ma question est excessivement conne, je veux bien qu'on me le dise. Merci d'avance

Message cité 1 fois
Message édité par Tipi470 le 08-08-2008 à 16:28:43
Reply

Marsh Posté le 08-08-2008 à 16:23:06    

Un pointeur de pointeur n'est rien d'autre qu'un pointeur sur quelque chose (entre autre ici un pointeur). Si tu as compris les pointeurs tu comprends les pointeurs de pointeurs ou les pointeurs de pointeurs de pointeurs etc.
 
Si tu ne comprends pas, lis/prends un cours sur le C, tu trouveras toutes les infos dedans.

Reply

Marsh Posté le 08-08-2008 à 17:14:04    

Tipi470 a écrit :


void F_Util ()
{
      float Tableau[Dim];
 
      Fprinc ( float Tableau[Dim] );
       
      // ici, faire un print des éléments du tableau montre qu'ils n'ont pas été affectés des valeurs données   dans f_calc
}


 
quadn je lis oui je pense que tu as droit de revoir ton cours de C

Reply

Marsh Posté le 09-08-2008 à 16:40:17    

Passe directement ton tableau comme l'a montré Joel. Les tableaux sont toujours passés par référence, donc tu n'as rien de spécial à faire. Les seuls trucs qui sont passés pas valeur sont les types de base (int, long, double...) et les structures.

Reply

Marsh Posté le 09-08-2008 à 18:36:51    

matafan a écrit :

Passe directement ton tableau comme l'a montré Joel. Les tableaux sont toujours passés par référence, donc tu n'as rien de spécial à faire. Les seuls trucs qui sont passés pas valeur sont les types de base (int, long, double...) et les structures.


TOUT est passé par valeur, quand c'est un pointeur, c'est la valeur du pointeur qui est passée, soit l'adresse du tableau pointé...


Message édité par ptitchep le 09-08-2008 à 18:38:01

---------------
deluser --remove-home ptitchep
Reply

Marsh Posté le 09-08-2008 à 22:37:13    

Certes, mais je crois que tout le monde à compris ce que je voulais dire...

Reply

Marsh Posté le 11-08-2008 à 08:41:51    

ok, merci.

Reply

Sujets relatifs:

Leave a Replay

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