首页 > 用户发贴区 > 编程问题提问区 > 请教一个数据存储的高低地址问题
2006
09-03

请教一个数据存储的高低地址问题

typedef struct tag_PLAYER


{


unsigned char bFlag;


unsigned short sSum;


union


  {


   unsigned char strName[3];


   unsigned long IPlayerId;


   unsigned short sGroupId;


   };


unsigned short sAction;


unsigned long IParam;


} P;AYER,* PPLAYER;


VOID main()


{


 PLAYER m;


 m.bFlag=255;


 m.sSUM=0×0102;


m.IPlayerId=0x002233ff;


m.sAction=4;


m.lParam=0×10203040;


printf(“size=%d\n”,sizeof(m);


printf(“PlayerId=0x%x\n”,m.sGruopId);


printf(“Name[[0]=%u;Name[3]=%u\n”,m.strName[0],m.strName[3]);


unsigned short * p =&m.sGroupId;


p+=4;


printf(“*p=0x%x”,*p);


}


 


参考答案:size=16


playerId=0X33FF


nAME[0]=255;Name[3]=0


*p=0×3040;


问题一:32 位机器中long int 为4字节??


问题二:共用体(联合体)中,如本例中


union


  {


   unsigned char strName[3];


   unsigned long IPlayerId;


   unsigned short sGroupId;


   };


m.IPlayerId=0x002233ff;


给long int 的IPlayerId赋值后,sGroupId取他的低位??


问题三:机器是怎样存储数据的?低位存在低地址,还是存高地址?


从本例中来看:低位存在高地址中.


 


请教一个数据存储的高低地址问题》有 3 条评论

  1. ymynotg 说:

    我的理解:

    问题一:应该是的。

    问题二、三:应该涉及到字节对齐与大小字头的问题,要看运行时的具体环境吧。

  2. zlllzlllch 说:

    请问在什么机器上面做的啊?

     

  3. peterzhu_1 说:

    在WINDOWS 2000 SERVER上运行的

留下一个回复