typedef volatile struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT1;
typedef volatile __packed struct
{
INT8U a;
INT32U b;
INT16U c;
}STR_UCT2;
STR_UCT1 STRUCT1,*p1;
STR_UCT2 STRUCT2,*p2;
INT8U TEST[256];
main()
{
for(i=0;i<256;i++)
TEST[i] = i+1;
/*************************************************/
memcpy((void*)&STRUCT1,TEST,sizeof(STR_UCT1));
memcpy((void*)&STRUCT2,TEST,sizeof(STR_UCT2));
while(1);
}
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x01,STRUCT1.b = 0x0403,STRUCT1.c = 0x08070605;
STRUCT2.a = 0x01,STRUCT2.b = 0x0302,STRUCT2.c = 0x07060504;
/************************************************************************/
p1 = (STR_UCT1*)(TEST);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x01,STRUCT1.b = 0x0403,STRUCT1.c = 0x08070605;
STRUCT2.a = 0x01,STRUCT2.b = 0x0302,STRUCT2.c = 0x07060504;
/**************************************************************************/
p1 = (STR_UCT1*)(TEST+1);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+1);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后:TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x02,STRUCT1.b = 0x0004,STRUCT1.c = 0x05080706;
STRUCT2.a = 0x02,STRUCT2.b = 0x0403,STRUCT2.c = 0x08070605;
/******************************************************************/
p1 = (STR_UCT1*)(TEST+2);
STRUCT1.a = p1->a;
STRUCT1.b = p1->b;
STRUCT1.c = p1->c;
p2 = (STR_UCT2*)(TEST+2);
STRUCT2.a = p2->a;
STRUCT2.b = p2->b;
STRUCT2.c = p2->c;
运行后: TEST 0X200034E0 STRUCT1 0X20002B20 STRUCT2 0X20002AE9
STRUCT1.a = 0x03,STRUCT1.b = 0x0605,STRUCT1.c = 0x06050807;
STRUCT2.a = 0x03,STRUCT2.b = 0x0504,STRUCT2.c = 0x09080706;