|
发表于 2007-11-8 13:02:01
|
显示全部楼层
typedef struct
{
unsigned char Ret;
char *Str;
unsigned char Checked;
}tDiag;
tDiag A1={1,"111",0};
tDiag A2={2,"222",0};
tDiag B1={3,"333",0};
tDiag B2={4,"444",0};
tDiag *p;
p = &A2;
ScrPrint(0,0,ASCII,"&A1=%p",&A1);//0x285eff7c
ScrPrint(0,1,ASCII,"A1=%p",A1);//0x1
ScrPrint(0,2,ASCII,"A1.Str=%s",A1.Str);//111
memcpy(&A1,&B1,sizeof(A1));
ScrPrint(0,3,ASCII,"&A1=%p",&A1);//0x285eff7c
ScrPrint(0,4,ASCII,"A1=%p",A1);//0x3
ScrPrint(0,5,ASCII,"A1.Str=%s",A1.Str);//333
getkey();
ScrCls();
ScrPrint(0,0,ASCII,"&A2=%p",&A2);//0x285eff70
ScrPrint(0,1,ASCII,"A2=%p",A2);//0x2
ScrPrint(0,2,ASCII,"A2.Str=%s",A2.Str);//222
A2=B2;
ScrPrint(0,3,ASCII,"&A2=%p",&A2);//0x285eff70 地址没变
ScrPrint(0,4,ASCII,"A2=%p",A2);//0x4
ScrPrint(0,5,ASCII,"A2.Str=%s",A2.Str);//444
ScrPrint(0,6,ASCII,"*p.Str=%s",(*p).Str);//444
getkey();
编译环境:GCCARM(GCC 3.0)
结论:
1.在新的编译器下,相同类型的结构体可民直接赋值,即A =B;
2.在使用此特性前,建议测试一下你的编译器,同时此代码以后会不会用到其他编译平台。
否则,还是memcpy(&A1,&B1,sizeof(A1)); |
|