#include <stdio.h>
union uni
{
struct
{
char* p3;
int n4;
}s1;
struct
{
char* p5;
int n6;
int n7;
}s2;
};
int main()
{
union uni u;
u.s1.p3=(char*)&u.s2.n7;
u.s2.p5=(char*)&u.s2.n6;
u.s2.n6=0x11111111;
u.s2.n7=0xffffffff;
u.s1.n4=0x22222222;
union uni
{
struct
{
char* p3;
int n4;
}s1;
struct
{
char* p5;
int n6;
int n7;
}s2;
};
int main()
{
union uni u;
u.s1.p3=(char*)&u.s2.n7;
u.s2.p5=(char*)&u.s2.n6;
u.s2.n6=0x11111111;
u.s2.n7=0xffffffff;
u.s1.n4=0x22222222;
printf(“%d %d\n”,sizeof(u),sizeof(&u));
printf(“%d\n”,(int*)&u.s1.n4-(int*)&u.s2.p5);
printf(“%d %d\n”,*u.s1.p3,*u.s2.p5);
}
最后为什么 *u.s1.p3=*u.s2.p5=34?
解决方案
40
原因是它们都是指向char型的指针
间接取值,取出了0x22
当然就是十进制的34了
间接取值,取出了0x22
当然就是十进制的34了