Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

aide sur une ligne...

3 réponses
Avatar
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

3 réponses

Avatar
É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 vois par contre pas l'intérêt d'avoir posté une fonction si moche.

--
Éric Lévénez
FAQ de fclc : <http://www.levenez.com/lang/c/faq/>
Avatar
kurtz le pirate
In article <4ce8eadb$0$7866$,
Éric Lévénez wrote:

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
Avatar
Pierre Maurette
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