Si je déclare une Union:Comment savoir quelle variable de Union est utilisée?
union TestUnion
{
struct
{
unsigned int Num;
unsigned char Name[5];
}TestStruct;
unsigned char Total[7];
};
Maintenant, Comment puis-je savoir que si total [7] est utilisé ou TestStruct est utilisé?
J'utilise C! Je revisitais les syndicats et les structures et cette question m'est venue à l'esprit. "sizeof
" ne peut pas être utilisé car les deux sont de la même taille, c'est-à-dire 7 octets. (Et voici une autre question)
Lorsque j'ai rempli seulement "Total" avec un caractère "a" et j'ai essayé sizeof(TestUnionInstance)
, il a retourné 12 (Taille de Char est 1 octet, droit?). J'ai donc isolé la structure et trouvé que la taille de la structure est de 12 octets, pas 5 + 2 = 7 octets .... Étrange !! Tout le monde peut expliquer ??
P.S. J'utilise Visual Studio 2008.
Un merci spécial pour "Padding Part" .... Je ne le savais pas !! Génial!! – Swanand
Le rembourrage vient après le 'char', pas avant. Strictement parlant, une implémentation * pourrait * mettre le remplissage avant elle, mais il faudrait alors mettre la même quantité de remplissage avant si vous avez changé de 'char [5]' à 'char [6]', ce qui serait assez absurde . C nécessite des structures avec une séquence initiale commune d'éléments pour être compatible. –