question sur le passage d'un pointeur en paramètre

question sur le passage d'un pointeur en paramètre - C++ - Programmation

Marsh Posté le 02-04-2003 à 19:49:30    

Soit la fonction suivante :
 
void coincide (vecteur3d *p11, vecteur3d *p22)
{
...
}
et son appel :
 
p2->coincide (p1, p2) ;
 
p1 et p2 sont des pointeurs de type verteur3d (une classe)
Pourquoi ça ne marche pas quand je met des & devant p1 et p2 ?

Reply

Marsh Posté le 02-04-2003 à 19:49:30   

Reply

Marsh Posté le 02-04-2003 à 20:27:56    

static void vecteur3d::coincide(vecteur3d *p1, vecteur3d *p2) {
...
}
 
vecteur3d *p1, *p2;
 
vecteur3d::coincide(p1, p2);
 
devrait marcher ...
sinon, si tu as
 
vecteur3d p1, p2;
 
tu dois faire :
vecteur3d::coincide(&p1, &p2);
 
 
et dernière solution : si les & sont dans la déclaration de ta fonction (à la place des étoiles) alors la solution est :
 
vecteur3d p1, p2;
 
vecteur3d::coincide(p1, p2);
 
 
les miracles du passage par référence ou par valeur ... :D


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

Marsh Posté le 02-04-2003 à 21:07:53    

theShOcKwAvE a écrit :


les miracles du passage par référence ou par valeur ... :D


 
et en mettant des const (référence ou valeur) c'est le bonheur.

Reply

Marsh Posté le 02-04-2003 à 23:11:26    

Konar a écrit :


 
et en mettant des const (référence ou valeur) c'est le bonheur.


 
c'est vrai qu'on peut mettre des const ....
 
donc nouveau proto de fonction :
 
static void vecteur3d::coincide(const vecteur3d *p1, const vecteur3d *p2);


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

Marsh Posté le 03-04-2003 à 21:31:28    

theShOcKwAvE a écrit :


 
c'est vrai qu'on peut mettre des const ....
 
donc nouveau proto de fonction :
 
static void vecteur3d::coincide(const vecteur3d *p1, const vecteur3d *p2);


 
les const c pas juste pour les constantes  :??:  
ça fait quoi d'autre sinon ?

Reply

Marsh Posté le 03-04-2003 à 21:35:22    

airseb a écrit :

Soit la fonction suivante :
 
void coincide (vecteur3d *p11, vecteur3d *p22)
{
...
}
et son appel :
 
p2->coincide (p1, p2) ;
 
p1 et p2 sont des pointeurs de type verteur3d (une classe)
Pourquoi ça ne marche pas quand je met des & devant p1 et p2 ?
 


 
(voir la question en gras)
sachant que p1 et p2 ont été déclarés comme pointeurs de type vecteur3d

Reply

Marsh Posté le 04-04-2003 à 00:21:20    

airseb a écrit :


 
(voir la question en gras)
sachant que p1 et p2 ont été déclarés comme pointeurs de type vecteur3d
 


 
ca ne marche pas quand tu mets des & devant p1 et p2 car tu demandes l'adresse de ces variables => tu obtiens un pointeur sur un pointeur de vecteur ... Un niveau d'indirection en trop ...
 
Les const sont effectivement pour préciser les constantes ... Et par conséquent, quand, dans une fonction, tu ne modifies pas les paramètres, tu peux les déclarer en const ... C'est plus explicite pour l'utilisateur qui reprendra tes classes ...


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

Marsh Posté le 04-04-2003 à 01:25:08    

theShOcKwAvE a écrit :


Les const sont effectivement pour préciser les constantes ... Et par conséquent, quand, dans une fonction, tu ne modifies pas les paramètres, tu peux les déclarer en const ... C'est plus explicite pour l'utilisateur qui reprendra tes classes ...


 
et ca permet (dans certains cas) au compilateur d'optimiser plus ou moins le code.

Reply

Marsh Posté le 04-04-2003 à 04:40:18    

Konar a écrit :


et ca permet (dans certains cas) au compilateur d'optimiser plus ou moins le code.


 
Hmm ce n'est jamais le cas meme si c'est un mythe assez répandu.
 
En aucun cas un const n'est une indication au compilateur
d'optimisation. Et s'il fait l'analyse pour voir les variables qui ne sont accédés qu'en lecture alors il n'a pas besoin de const pour le voir (et s'il tenait compte du const il y aurait de forte chances pour qu'il ait tout faux).
 
Afin que ce soit clair: const n'est qu'un outil qui améliore la type safety des programmes, par l'ajout de warnings et d'erreurs à la compilation lorsqu'elle n'est pas respectée mais jamais utilisée par le compilateur pour optimisation.
 
Seule optimisation "algorithmique" permise par const: la surcharge de fonction,
 
j'ai une string de char appelee machaine
- en version non const, machaine[1] renverra une reference non const sur un char.
- en version const, machaine[1] renverra un simple char en copie.
 
mais dans ce cas c'est une optimisation faite par l'utilisateur et non par le compilateur.
 
LeGreg


---------------
voxel terrain render engine | animation mentor
Reply

Sujets relatifs:

Leave a Replay

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