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取他的低位??
问题三:机器是怎样存储数据的?低位存在低地址,还是存高地址?
从本例中来看:低位存在高地址中.
>> 本文固定链接: http://www.vcgood.com/archives/1041
>> 转载请注明: peterzhu_1 2006年09月03日 于 C语言帝国 发表
我的理解:
问题一:应该是的。
问题二、三:应该涉及到字节对齐与大小字头的问题,要看运行时的具体环境吧。
请问在什么机器上面做的啊?
在WINDOWS 2000 SERVER上运行的