You are on page 1of 2

Report Abuse Next Blog» Create Blog Sign In

Mandalika's [ SCJP mock test(s) | Vocabulary test


scratchpad
Archives
09.04 10.04 11.04 12.04 01.05 02.05 03.05 04.05 05.05 06.05 07.05 08.05 09.05 10.05 11.05 12.05 01.06 02.06 03.06 04.06 05.06
06.06 07.06 08.06 09.06 10.06 11.06 12.06 01.07 02.07 03.07 04.07 05.07 06.07 08.07 09.07 10.07 11.07 12.07 01.08 02.08 03.08
04.08 05.08 06.08 07.08 08.08 09.08 10.08 11.08 12.08 01.09 02.09 03.09 04.09 05.09 06.09 07.09 08.09 09.09 10.09 11.09 12.09
01.10 02.10 03.10 04.10 05.10 06.10 07.10 08.10 09.10 10.10 11.10 12.10

Monday, October 11, 2004

C/C++: Structure Vs Union

A structure is a collection of items of different types; and each data item will have its own memory location. Where
as only one item within the union can be used at any time, because the memory allocated for each item inside the
union is in a shared memory location i.e., only one memory location will be shared by the data items of union.

Size of union will be the size of the biggest variable.

Why do we need Union in the first place?

Sometimes we may not need the data of all the (related) data items of a complex data structure and be
storing/accessing only one data item at a time. Union helps in such scenarios.

e.g.,

typedef union
{
int Wind_Chill;
char Heat_Index;
} Condition;

typedef struct
{
float temp;
Condition feels_like;
} Temperature;

Wind Chill is only calculated when it is cold and heat index is used only when it is hot. There is no need for both of
them at the same time. So when we specify the temp, feels_like will have only one value - either wind chill or heat
index, but not both.

The following simple program illustrate the above explanation:

% cat structunion.c
#include <stdio.h>
#include <stdlib.h>

typedef union
{
int Wind_Chill;
char Heat_Index;
} Condition;
typedef struct
{
float temp;
Condition feels_like;
} Temperature;

void main()
{
Temperature *tmp;

tmp = (Temperature *)malloc(sizeof(Temperature));

printf("\nAddress of Temperature = %u", tmp);


printf("\nAddress of temp = %u, feels_like = %u", &(*tmp).temp, &(*tmp).feels_like);
printf("\nWind_Chill = %u, Heat_Index= %u\n", &((*tmp).feels_like).Wind_Chill, &((*tmp).fe
}
% cc -o structunion structunion.c
% ./structunion
Address of Temperature = 165496
Address of temp = 165496, feels_like = 165500
Wind_Chill = 165500, Heat_Index= 165500

Posted by: Giri Mandalika. # 5:17 PM

Comments:
Great Content in your Blog... helps a lot refreshing some basic concepts... Thanks a lot....
# posted by Anonymous : 10:01 AM, April 27, 2007
The explanation is easy to understand.
# posted by JLPT : 4:43 AM, December 25, 2008
Simple but good explanation, thanks
# posted by matrix : 6:04 AM, April 06, 2009
simple,easy,good .
thanks
# posted by tushar : 9:29 PM, December 02, 2009
Simple and beneficial. Thanks.
# posted by Khairina : 12:16 AM, June 01, 2010
Post a Comment

Links to this post:

Create a Link

<< Home

2004-2010

You might also like