Sto leggendo un programma in c++ ma non riesco a capire l'uso e il significato dell'asterisco. Sul manuale si dicono molte cose ma io non riesco a comprenderle. Qui sotto vi posto il codice incriminato:

codice:
struct geometria_sezione
{
 float area;          
 float scx;           
 float scy;           
 float ix;            
 float iy;            
 float ixy;           
 float alfa;          
 float ia;            
 float ib;
};

struct poligono_sezione
{
 float x[NMAXVRT];    
 float y[NMAXVRT]; 
 int numv;            
 float omog;        
 int traz;           
 char classe[8];   
 float fd;           
 int automfd;        
 int dominio;         
 int fase;           
 float epsc0;        
 float epscu;      
 int automeps;       
 int selez[NMAXVRT];  
 int bloc[NMAXVRT];  
};

struct geometria_sezione calcola_caratt_geometriche (struct poligono_sezione *);

struct geometria_sezione calcola_caratt_geometriche (struct poligono_sezione *polic)
{
 int register k,kp1,np;
 float a,d,hy,hx;
 struct geometria_sezione geo;


 geo.area=0.0; geo.scx=0.0; geo.scy=0.0;
 geo.ix=0.0;   geo.iy=0.0;  geo.ixy=0.0;

 for (np=0;np<=NMAXPOLI-1;np++)
     {
      for (k=0;k<=polic[np].numv-1;k++)
          {
           if (k==polic[np].numv-1) kp1=0; else kp1=k+1;

           a=polic[np].x[kp1]-polic[np].x[k];
           d=polic[np].y[kp1]-polic[np].y[k];
           hy=polic[np].y[k]-yg;
           hx=polic[np].x[k]-xg;

           geo.area+=polic[np].omog*a*(hy+d/2);
           geo.scx+=polic[np].omog*a/2*(hy*hy+d*d/3+d*hy);
           geo.scy-=polic[np].omog*d/2*(hx*hx+a*a/3+a*hx);
           geo.ix+=polic[np].omog*a/3*(pow(hy,3)+hy*d*d+3*hy*hy*d/2+pow(d,3)/4);
           geo.iy-=polic[np].omog*d/3*(pow(hx,3)+hx*a*a+3*hx*hx*a/2+pow(a,3)/4);
           geo.ixy+=polic[np].omog*a*(hx/2*(hy*hy+d*d/3+d*hy)+a/2*(hy*hy/2+d*d/4+2*d*hy/3));
          }
     }

 for (k=0;k<=arm.numarm-1;k++)
     {
      if (arm.af[k]!=0.0 && arm.cong[k]==0)
         {
          geo.area+=arm.omogarm*arm.af[k];
          geo.scx+=arm.omogarm*arm.af[k]*(arm.y[k]-yg);
          geo.scy+=arm.omogarm*arm.af[k]*(arm.x[k]-xg);
          geo.ix+=arm.omogarm*arm.af[k]*pow(arm.y[k]-yg,2);
          geo.iy+=arm.omogarm*arm.af[k]*pow(arm.x[k]-xg,2);
          geo.ixy+=arm.omogarm*arm.af[k]*(arm.x[k]-xg)*(arm.y[k]-yg);
         }
     }

 if (geo.ix-geo.iy!=0)   geo.alfa=atan(-2*geo.ixy/(geo.ix-geo.iy))/2;
 else { if (geo.ixy>0.0) geo.alfa=-0.7854; else geo.alfa=0.7854; }
 if (geo.ix<geo.iy)      geo.alfa+=1.570796327;

 geo.ia=(geo.ix+geo.iy)/2+sqrt(pow(geo.ix-geo.iy,2)+4*pow(geo.ixy,2))/2;
 geo.ib=(geo.ix+geo.iy)/2-sqrt(pow(geo.ix-geo.iy,2)+4*pow(geo.ixy,2))/2;

 return (geo);
}
Non ho bisogno che entriate nel merito del codice ma solo che mi spiegate perché dopo poligono sezione c'é l'asterisco e perché dopo l'asterisco una variabile in più (polic) non dichiarata in precedenza:

codice:
struct geometria_sezione calcola_caratt_geometriche (struct poligono_sezione *);
Mi potreste fare un esempio simile a questo ma con un algoritmo più semplice che mi permette di capire una volta per tutte l'uso di questo asterisco... Vorrei anche capire quando posso mettere questo simbono e quando invece devo metterlo... L'unica cortesia che vi chiedo é di usare una terminologia semplice perché altrimenti sono di nuovo punto a capo...