union problem

manish007g's Avatar, Join Date: Aug 2012
Newbie Member
int main()
union a
int i;
char ch[2];
union a z={512};
printf("%d %d",z.ch[0],z.ch[1]);
return 0;

Output is 0 2 but how? please explain ..
xpi0t0s's Avatar, Join Date: Aug 2004
Think how 512 is stored in memory. Did you get 0x02 and 0x00 (thus forming the 16-bit number 0x0200)? That's where the 0 and 2 come from.

Best not rely on this though. This is going to be very compiler and platform dependent - completely unportable.