aide sur une ligne...

Le
kurtz le pirate
bonjour,

dans un bouquin que je suis en train de lire, j'ai trouvé cette fonction

-
void midpnt (int B, int C, int *pP, float x, float y, float z) {
int tmp, e;
if (B<C) { tmp=B; B=C; C=tmp }
for (e=0;e<nedge; e++)
if (edges[e].i == B && edges[e].j == C) break;
if (e == nedge)
{ edges[e].i = B; edges[e].j = C;
edges[e].P = *pP = ++npoints;
nedge++;
point(*pP, x, y, z)
} else *pP = edges[e].P
}
-


dans le main() elle est appelée comme ça :
midpnt(B, C, &P, xP, yP, zP);

la ligne que je ne suis pas sûr d'avoir compris c'est :
edges[e].P = *pP = ++npoints;

* incrément de 'npoints'
* copie de la valeur de npoints dans la variable pointée par *pP (le 'P'
dans le main puisque passé par &P)
* copie de cette même valeur dans le tableau de structure edges[e].P

donc si npoints = 5, après la ligne :
- npoints = 6
- P (global) = 6
- edges[e].P = 6 aussi !


j'ai bon ou pas ?
merci de votre aide.


--
klp
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Éric Lévénez
Le #22820771
Le 21/11/10 10:14, kurtz le pirate a écrit :

la ligne que je ne suis pas sûr d'avoir compris c'est :
edges[e].P = *pP = ++npoints;



Si j'ai bien compris ta question, tu demandes ce que fait :

a = b = c;

Réponse : place la valeur c dans b et a.

Je ne vois par contre pas l'intérêt d'avoir posté une fonction si moche.

--
Éric Lévénez
FAQ de fclc :
kurtz le pirate
Le #22821121
In article Éric Lévénez
Le 21/11/10 10:14, kurtz le pirate a écrit :

> la ligne que je ne suis pas sûr d'avoir compris c'est :
> edges[e].P = *pP = ++npoints;

Si j'ai bien compris ta question, tu demandes ce que fait :

a = b = c;

Réponse : place la valeur c dans b et a.



je ne suis pas expert en c. je n'étais pas sûr non plus du '*pP' et du
'&P'. je trouve ça assez déroutant.


Je ne vois par contre pas l'intérêt d'avoir posté une fonction si moche.



moche... peut être, c'est ton opignon. c'est ce que j'ai trouvé dans un
bouquin. j'essaye juste de comprendre.



--
klp
Pierre Maurette
Le #22821251
kurtz le pirate, le 11/21/2010 a écrit :
bonjour,

dans un bouquin que je suis en train de lire, j'ai trouvé cette fonction

----
void midpnt (int B, int C, int *pP, float x, float y, float z) {
int tmp, e;
if (B<C) { tmp=B; B=C; C=tmp }
for (e=0;e<nedge; e++)
if (edges[e].i == B && edges[e].j == C) break;
if (e == nedge)
{ edges[e].i = B; edges[e].j = C;
edges[e].P = *pP = ++npoints;
nedge++;
point(*pP, x, y, z)
} else *pP = edges[e].P
}
----


dans le main() elle est appelée comme ça :
midpnt(B, C, &P, xP, yP, zP);

la ligne que je ne suis pas sûr d'avoir compris c'est :
edges[e].P = *pP = ++npoints;

* incrément de 'npoints'
* copie de la valeur de npoints dans la variable pointée par *pP (le 'P'
dans le main puisque passé par &P)
* copie de cette même valeur dans le tableau de structure edges[e].P

donc si npoints = 5, après la ligne :
- npoints = 6
- P (global) = 6
- edges[e].P = 6 aussi !


j'ai bon ou pas ?



Il me semble bien que c'est exactement ça. Notez que vous affectez la
valeur 6 à une variable (P) locale de l'appelant (main()). Vous
l'affectez également à un élément d'un tableau de structures edges qui
est global, comme nedge. C'est au moins à ce niveau que Éric détecte de
la mocheté.

--
Pierre Maurette
Publicité
Poster une réponse
Anonyme