Nếu tôi tuyên bố một liên minh như:Làm thế nào để biết được biến số nào của Union được sử dụng?
union TestUnion
{
struct
{
unsigned int Num;
unsigned char Name[5];
}TestStruct;
unsigned char Total[7];
};
Bây giờ, Làm thế nào tôi có thể biết rằng cho dù Tổng số [7] được sử dụng hoặc TestStruct được sử dụng?
Tôi đang sử dụng C! Tôi đã xem xét lại các công đoàn và cấu trúc và câu hỏi này xuất hiện trong đầu tôi. Không thể sử dụng "sizeof
" vì cả hai đều có cùng kích thước với 7 byte. (Và Ở đây có một câu hỏi khác)
Khi tôi chỉ điền "Tổng" với Ký tự 'a' và Đã thử sizeof(TestUnionInstance)
, nó trả về 12 (Kích thước của Char là 1 byte, Phải không?). Vì vậy, tôi cô lập cấu trúc từ nó và thấy rằng Kích thước của cấu trúc là 12 byte không 5 + 2 = 7 byte .... Lạ !! Mọi người đều có thể giải thích ??
P.S. Tôi đang sử dụng Visual Studio 2008.
lời cảm ơn đặc biệt dành cho "Phần đệm" .... Tôi không biết điều này !! Tuyệt quá!! – Swanand
Đệm sẽ xuất hiện sau 'char', không phải trước đó. Nói đúng một cách thực hiện * có thể * đặt đệm trước nó, nhưng sau đó nó cũng sẽ phải đặt cùng một lượng padding trước nó nếu bạn thay đổi từ 'char [5]' thành 'char [6]', nó sẽ khá vô nghĩa . C yêu cầu các cấu trúc với một chuỗi các phần tử ban đầu chung để tương thích. –