[c] return d'un tableau par une fonction

j’aimerai savoir si une fonction pourai rtourner un tableau. je m’explique:

//ici c'est un fonction qui triple toute les case du tableau//
long triple(long tab[],long taille)
{
       long boucle;
for(boucle=0;boucle<taille;boucle++)
{
tab[boucle]=tab[boucle]*3;
}
return ??????;
}

int main(...)
{
long tableau[3]={2, 5, 8}, long tableau2[3]={};/*tableau contient les valeurs a tripler, tableau2 les valeurs ou il faut rentrer les triples*/

tableau2?=triple(tableau, 3);
}

voila j’espere que vous mavez compris. remplacez les points d’interrogations par la bonnes réponse.lol

Oui c’est possible, en précisant ta valeur retour à la fonction comme ceci:

long [] fonction(...)

tu feras alors:

return tab;

et enfin:

tab2 = fonction(...)

:slight_smile:

raté.

Un tableau c’est une adresse vers un certain nombre d’élément contigûe.

Si tu veux faire ça, il faut le faire de cette façon :

void triple(long dst[], long src[], size_t size) {
  for ( size_t i = 0; i < size; ++i ) 
    dst[i] = src[i]*3;
}

Et à l’appel :

triple(tableau2, tableau, 3);

Les tableaux en C ne sont pas comme ceux en java, n’est-ce pas Jeanguy.

Lorsque tu passes un tableau en paramètre de fonction, c’est en fait son pointeur que tu passes.

Donc, pas besoin de valeur "return", sauf pour éventuellement indiquer un status

Je vais me coucher et réviser mon cours de C avant…

jeanguy> clairement :slight_smile: c’est à moitié du java ce que tu nous as fait là

merci sans nom, jai juste remarquer une ereur… ta oublier d’ouvrir ta boucle!
sinon merci de l’astuce.
@++

non pas d’erreur dans mon code (me suis rerelu quand même)

Je suis pas sur de ca, mais il me semble que tu peux égalemnt faire comme ca :


long triple(long tab[],long taille)
{
long boucle;
for(boucle=0;boucle<taille;boucle++)
{
tab[boucle]=tab[boucle]*3;
}
}

int main(...)
{
long taille=3;
long tableau[taille]={2, 5, 8}
tableau2=tableau1;                    // C'est là que je ne suis pas sur (au pire, faut faire une boucle pour recopier)
triple(tableau2[],taille)
}

déjà, on met un petit void à la fonction, car par de retour. Et ensuite ça ne marchera pas.

Il faut bien comprendre la notion de pointeur, et là ce n’est pas le cas : tableau1 - même si c’est un tableau - reste un pointeur vers un entier. Faire *tableau revient au même que tableau[0], et *(tableau+1) <=> tableau[1].

Si tu veux utiliser tableau2 comme placeholder, tu peux, mais comme cela :

long* tableau2 = tableau;

Etc.