Duc_onlajoy | Bonjour
Je pensais qu'une fonction ne pouvais renvoyer qu'un type simple et non une structure et que pour renvoyer une structure il faut forcement passer par un void.
Mais voici le code que je viens de lire (il est pas de moi) et qui fonctionne :
Code :
- s_Point3D psInterpo_lineaire(double dIsoval,s_Point3D sP1,s_Point3D sP2,
- double dV1,double dV2)
- {
- s_Point3D sP;
- sP.dX=sP1.dX+(dIsoval-dV1)/(dV2-dV1)*(sP2.dX-sP1.dX);
- sP.dY=sP1.dY+(dIsoval-dV1)/(dV2-dV1)*(sP2.dY-sP1.dY);
- sP.dZ=sP1.dZ+(dIsoval-dV1)/(dV2-dV1)*(sP2.dZ-sP1.dZ);
- return sP;
- }
- s_Point3D* psPointsIntersection(unsigned char iIndexCube,s_Cellule sCel,double dIsoval)
- {
- int i;
- s_Point3D *psListePointsIntersection=malloc(sizeof(s_Point3D)*12);
- for(i=0;i<12;i++){
- psListePointsIntersection[i].dX=FLT_MAX;
- psListePointsIntersection[i].dY=FLT_MAX;
- psListePointsIntersection[i].dZ=FLT_MAX;
- }
- psListePointsIntersection[0]=psInterpo_lineaire(dIsoval,sCel.psP[0],sCel.psP[1],sCel.pdVal[0],sCel.pdVal[1]);
- (...)
- return psListePointsIntersection;
- }
- void vCalculTriangles(s_Cellule sCel,double dIsoval,s_Triangle3D *psTriangles)
- /* Fournit les coordonnées des triangles */
- {
- int i;
- int iN_Triangles=0;
- unsigned char iIndex=iIndexCube(sCel,dIsoval);
- s_Point3D *psListeDesPointsIntersection=psPointsIntersection(iIndex,sCel,dIsoval);
- for(i=0;ppiTableDesTriangles[iIndex][i]!=-1;i+=3){
- psTriangles[iN_Triangles].psP[0] = psListeDesPointsIntersection[ppiTableDesTriangles[iIndex][i]];
- psTriangles[iN_Triangles].psP[1] = psListeDesPointsIntersection[ppiTableDesTriangles[iIndex][i+1]];
- psTriangles[iN_Triangles].psP[2] = psListeDesPointsIntersection[ppiTableDesTriangles[iIndex][i+2]];
- iN_Triangles++;
- }
- free(psListeDesPointsIntersection);
- }
|
Donc on peut passer un structure en type de retour pour une fonction??
Merci de vos commentaires |