struct和union的区别
structure | union |
---|---|
Keyword |
Keyword |
Example structure declaration: struct s_tag { int ival; float fval; char *cptr; }s;
|
Example union declaration: union u_tag { int ival; float fval; char *cptr; }u;
|
Within a structure all members gets memory allocated and members have addresses that increase as the declarators are read left-to-right. That is, the members of a structure all begin at different offsets from the base of the structure. The offset of a particular member corresponds to the order of its declaration; the first member is at offset 0. The total size of a structure is the sum of the size of all the members or more because of appropriate alignment. |
For a union compiler allocates the memory for the largest of all members and in a union all members have offset zero from the base, the container is big enough to hold the WIDEST member, and the alignment is appropriate for all of the types in the union. When the storage space allocated to the union contains a smaller member, the extra space between the end of the smaller member and the end of the allocated memory remains unaltered. |
Within a structure all members gets memory allocated; therefore any member can be retrieved at any time.
|
While retrieving data from a union the type that is being retrieved must be the type most recently stored. It is the programmer's responsibility to keep track of which type is currently stored in a union; the results are implementation-dependent if something is stored as one type and extracted as another.
|
One or more members of a structure can be initialized at once. |
A union may only be initialized with a value of the type of its first member; thus union |