Code Bye

关于联合体的小问题

#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;

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了

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于联合体的小问题