Если я объявляю Союз:Как узнать, какая переменная используется в Union?
union TestUnion
{
struct
{
unsigned int Num;
unsigned char Name[5];
}TestStruct;
unsigned char Total[7];
};
Теперь, как я могу знать, что ли Total [7] используется или используется TestStruct?
Я использую C! Я пересматривал союзы и структуры, и этот вопрос пришел мне на ум. "sizeof
" не может использоваться, поскольку оба имеют одинаковый размер, то есть 7 байтов. (И вот еще один вопрос)
Когда я заполнил только «Всего» символом «a» и пробовал sizeof(TestUnionInstance)
, он вернулся 12 (размер Char равен 1 байт, справа?). Поэтому я выделил структуру из нее и обнаружил, что размер структуры составляет 12 байт, а не 5 + 2 = 7 байт .... Странно !! Никто не может объяснить ??
P.S. Я использую Visual Studio 2008.
a Специальная благодарность за «заполняющую деталь» .... Я не знал этого! Большой!! – Swanand
Заполнение происходит после 'char', а не раньше. Строго говоря, реализация * могла * поместить перед ним прокладку, но тогда она также должна была бы поместить туда ту же величину прокладки, если вы изменили ее с «char [5]» на «char [6]», что было бы довольно бессмысленным , C требует, чтобы структуры с общей исходной последовательностью элементов были совместимы. –