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 !
> 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
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
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é.
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é.