(Courriels de diversion: <contredisons@cherirais-acquerrait.com> <emportais@canalisera-boyauter.com> <developperions@vassaliserait-supplie.com> <lezardait@inexplore-exorde.com> <readaptez@regurgiter-comptabiliseront.com> <excuse@dilapidais-nageuses.com> <remontrances@etiolerait-redigeaient.com> <dechaînerons@toxines-basiques.com> <encadrement@mutante-rivaliserai.com> <superficies@minutent-editoriaux.com> )
Jerome Gasperi wrote: > > Salut, > > Un copain a le probleme suivant. Voici le programme C: > > #include<stdio.h> > > struct boom{ > short int toto; > short int titi; > short int tata; > short int tutu; > float youpi; > } bim; > > void main(){ > printf("%i\n",sizeof(bim)}; > } > > Le programme renvois la valeur de 12 ce qui estr normal puisque > float est code sur 4 octets et short int sur 2 : 4*2 +4 = 12 est la taille > de la structure bim. > > Par contre si on remplace la structure par: > > struct boom{ > short int toto; > short int titi; > short int tata; > float youpi; > } bim; > > Le programme renvois aussi 12 alors qu'il devrait renvoyer 3*2+4=10 !!!! > > Pourquoi ????? Sans doute a cause de l'alignement. Les objets de type float doivent avoire l'adresse divisee par 4. Pour le faire, dans ton deuxieme exemple le compilateur est oblige de garder deux octets vides pour que float soit a la bonne place. Enleve le float et la reponse sera 6. A+. Serguei. _______________________________________________________________________ Le CULTe sur le ouebe: http://savage.iut-blagnac.fr/