|
我想把一个char messge[6];的流转换成我自己的结构如下:
typedef struct a
{
int gigi;
char lolo;
char lulu;
}Msg,*LPMsg;
int main(int argc, char *argv[])
{
char messge[6];
messge[0]=0; //
messge[1]=1; //这四个填充了int gigi;也就是说此时gigi=256;
messge[2]=0; //
messge[3]=0; //
messge[4]=100; //这个填充了lolo=100
messge[5]=30; //这个填充了lulu=30
LPMsg msg=(LPMsg)name;
printf("gigi===%d\n",msg->gigi);
printf("lolo ===%d\n",msg->lolo);
printf("lulu===%d\n",msg->lulu);
system(" AUSE");
return 0;
}
结果运行得很好。。。正如我所假设的
gigi===256
lolo ===100
lulu===30
//=================下面就是我要阐述的主要内容===
只要我把这个结构里的3个变量的声明顺序改变下的话 如下:
typedef struct a
{
char lolo;
char lulu;
int gigi; //把这个4个字节的放到最后面
}Msg,*LPMsg;
messge[0]=100; //这个填充了lolo=100
messge[1]=1; //这个填充了lulu=30
messge[2]=0; //
messge[3]=1; //
messge[4]=0; //gigi按道理来说因该是256但结果数据出奇的大
messge[5]=0; //
输出的结果出呼我的意料之外;
请问为什么换了一下位置就会出现这个情况呢??谁给我个解释。
谢谢
gigi的数大得惊人。。。。。。。
|
|