#include<iostream.h>
struct animal
{
int wingspan;
int passengers;
union
{
float fuel_load;
float bomb_load;
int pallets;
};
}fighter,bomber,transport;
int main()
{
fighter.wingspan=40;
fighter.passengers=1;
fighter.fuel_load=12000.0; bomber.wingspan=90;
bomber.passengers=12;
bomber.bomb_load=14000.0; transport.wingspan=106;
transport.passengers=4;
transport.pallets=42; transport.fuel_load=18000.0;
fighter.pallets=4; cout<<"the fighter carries"<<fighter.pallets<<"pallets\n";
cout<<"the bomber bomb load is"<<bomber.bomb_load<<"\n";
cout<<fighter.fuel_load<<endl;
return 0;
}

我不太清楚为什么最后一个cout输出的是别的而不是12000.0

解决方案 »

  1.   

    这个是union的问题,后面对这个内存单元又进行了赋值了的,当然不会是前面赋的12000.0了啊。
      

  2.   

    因为union是多个成员占据一个空间,也就是说:
    union
    {
      float fuel_load;
      float bomb_load;
      int pallets;
    };
    这三个成员是共用一块空间的。你在
    fighter.fuel_load=12000.0;
    这一句之后又使用了
    fighter.pallets=4;
    这么一句,所以在你输出fighter.fuel_load的时候,系统将会用int(4)的二进制序列来当作float,自然就是你所说的“别的”,而不是你所希望的12000.0了。