Re: union



ramu wrote:

> Hi,
> main()
> {
> union {
> float i;
> int j;
> } un;
>
> un.i=2.35;
> printf("%f\n",un.i);
>
> un.j=3;
> printf("%d\n",un.j);
>
> printf("%f\n",un.i);
> }
>
> Am getting output as:
> 2.350000
> 3
> 0.000000
>
> I wonder how it gives 0.000000 for the value of un.i when i printed
> its value for the second time. can anyone help me out?

In short (there was a more detailed discussion recently), all members of
an union share storage. If you think in terms of memory, they are all
stored in the same memory area (large enough to hold the largest union
member). Writing a value into one member, and then accessing another
will give implementation dependant results. On your implementation, it
seems that when you read a piece of storage, with integer 3 stored in
it, as a float, it happens you get a float 0.00000. You may have ended
up with an illegal value of the float as well, and run into all sorts
of problems. You were just lucky 9or knew _exactly_ waht you were
doing).

Cheers

Vladimir

PS
Don't get into habit of using floats. Use double instead.

--
Worst Vegetable of the Year:
The brussels sprout. This is also the worst vegetable of next
year.
-- Steve Rubenstein

.



Relevant Pages

  • Re: problem with cast and unions
    ... The part where there is that problem is about conversion from a C float ... to a Small "cell" (actually an int). ... structure, and even then, only if it was NOT the member most recently ... need to declare the union. ...
    (comp.lang.c)
  • Re: Visual C++ Express wont compare object against float in std::upper_bound
    ... Neither order compiles in Debug mode. ... The *original* order compiles in Release mode. ... operator to take two Sample arguments rather than a Sample and a float. ... operator>as member ...
    (microsoft.public.vc.stl)
  • Re: union
    ... Writing a value into one member, ... > will give implementation dependant results. ... > it, as a float, it happens you get a float 0.00000. ... It's probably not exactly zero. ...
    (comp.lang.c)
  • __declspec(align(x)) and virtual tables
    ... I have a class with a virtual table that also has a member that is aligned ... __declspec) struct Vector4 {float x; ... struct MyStruct ...
    (microsoft.public.vc.language)
  • creating buffers in a memory allocated void area??
    ... I have a free memory area to which I'm having a void pointer. ... kinds like e.g. having a float pointer pointing at the first byte location ... float *ptrFloatBuffer; ...
    (microsoft.public.windowsce.embedded.vc)