OVH Cloud OVH Cloud

c++ passage d'un tableau dans une focntion ?!

7 réponses
Avatar
Didier
Bonjour,

comment puis je passer une tableau entre un programme et une fonction ?
(dans les deux sens) passer un tableau comme argument de la fonction ou
la fonction qui retourne un tableau


merci


didier


ps : tant que j'y suis, comment creer un tableau de taille variable quand on
ne connait pas sa taille à l'avance

7 réponses

Avatar
Benjamin Renaut
comment puis je passer une tableau entre un programme et une fonction ?
(dans les deux sens) passer un tableau comme argument de la fonction ou
la fonction qui retourne un tableau
Il faut utiliser les pointeurs.

Si tu ne connais pas les pointeurs, mieux vaudrait se renseigner avant :
http://perso.wanadoo.fr/carlov/cours/chap2/pointeurs.html
http://casteyde.christian.free.fr/cpp/cours/online/c1535.html
Ces pages sont trés bien et tu devrais y comprendre sans peine le
mécanisme des pointeurs.
En gros, ce sont des variables "pointant" (désignant) d'autres variables
- les pointeurs contiennent l'adresse mémoire d'une variable, et
permettent donc d'y accéder. Pour passer un tableau a une fonction, tu
vas passer en parametre un pointeur vers ce tableau, et sa taille (sauf si
c'est un tableau de char, auquel cas tu sauras quand le tableau
s'achévera grace au caractère terminator '' et le passage de la taille
est donc superflu). Tu dispose alors dans la fonction de tous ce qu'il te
faut pour l'accés au tableau : l'adresse mémoire du début du tableau,
et sa taille.

ps : tant que j'y suis, comment creer un tableau de taille variable
quand on ne connait pas sa taille à l'avance
Il s'agit du mécanisme de mémoire dynamique. Là aussi, je te renvoi aux

cours plus haut. En fait, il faut créer un tableau dans le tas (et non
plus dans la pile) de ta mémoire à l'aide d'opérateurs spécifiques, et
lui attribuer une taille pendant l'exécution du programme. C'est là
aussi un fondement de la programmation en C++ (et même de la
programmation en général), tout comme les pointeurs.

Donc, lis les cours des pages que j'ai collé plus haut, ça devrait
t'aider.

Avatar
Fabien LE LEZ
On Mon, 22 Dec 2003 21:16:50 +0100, "Didier" wrote:

comment puis je passer une tableau entre un programme et une fonction ?
(dans les deux sens) passer un tableau comme argument de la fonction ou
la fonction qui retourne un tableau


En C++, un tableau "de base" est de la forme std::vector<Type>. Il
s'agit d'un objet tout à fait comme les autres, qu'on peut passer
comme argument ou comme valeur de retour aussi facilement qu'un int.

std::vector<double> ma_fonction (std::vector<double> tab)
{
return tab;
}

Toutefois, étant donné la taille d'un tel objet, il est courant de le
passer par référence constante :

std::vector<double> ma_fonction (std::vector<double> const& tab)
{
return tab;
}

Tu peux également le passer par référence non constante, si ta
fonction doit pouvoir le modifier (attention à bien documenter cette
fonctionnalité) :

void mon_autre_fonction (std::vector<double>& tab)
{
if (tab.size()>4)
{
tab[4]= 3.14;
}
}

--
;-)

Avatar
kanze
Fabien LE LEZ wrote in message
news:...

[...]
Tu peux également le passer par référence non constante, si ta
fonction doit pouvoir le modifier (attention à bien documenter cette
fonctionnalité) :

void mon_autre_fonction (std::vector<double>& tab)
{
if (tab.size()>4)
{
tab[4]= 3.14;
}
}


Le fait que le type est une référence non-const n'est-il pas déjà une
documentation que tu as l'intention de le modifier ?

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Fabien LE LEZ
On 23 Dec 2003 00:32:17 -0800, wrote:

Le fait que le type est une référence non-const n'est-il pas déjà une
documentation que tu as l'intention de le modifier ?


Sans doute. Mais dans son cas (apparemment, il s'agit d'un débutant),
documenter la fonctionnalité en question peut servir à se demander si
c'est vraiment une bonne idée.

-- Fabien, qui se rattrape comme il peut ;-)

--
;-)

Avatar
Didier
En effet, je débute en C++
merci pour votre aide, rien ne vaut un exemple.
je vais suivre vos conseils, dans ma fonction je modifie le tableau.
Vous avez raison, il faut bien documenter son programme, sinon
il sera difficile de maintenir le code.

Encore merci
Didier


"Fabien LE LEZ" a écrit dans le message de
news:
On 23 Dec 2003 00:32:17 -0800, wrote:

Le fait que le type est une référence non-const n'est-il pas déjà une
documentation que tu as l'intention de le modifier ?


Sans doute. Mais dans son cas (apparemment, il s'agit d'un débutant),
documenter la fonctionnalité en question peut servir à se demander si
c'est vraiment une bonne idée.

-- Fabien, qui se rattrape comme il peut ;-)

--
;-)



Avatar
Fabien LE LEZ
On Tue, 23 Dec 2003 18:00:17 +0100, "Didier" wrote:

En effet, je débute en C++


Sur Usenet aussi apparemment :-(
Merci de placer ta réponse sous le bout de texte auquel tu réponds
(comme je le fais dans le présent message).
Cf <http://www.giromini.org/usenet-fr/repondre.html> pour plus
d'infos.


--
;-)

Avatar
Didier
"Fabien LE LEZ" a écrit dans le message de
news:
On Tue, 23 Dec 2003 18:00:17 +0100, "Didier" wrote:

En effet, je débute en C++


Sur Usenet aussi apparemment :-(
Merci de placer ta réponse sous le bout de texte auquel tu réponds
(comme je le fais dans le présent message).



comme ça ?


Cf <http://www.giromini.org/usenet-fr/repondre.html> pour plus
d'infos.


--
;-)