结构体强制类型转换
结构体的强制转换要注意的点:
- 字节对齐
- 结构体转换要先取地址用指针来转换
(struct sockaddr *)&servaddr
测试程序
#include <iostream>
using namespace std;
struct test
{
unsigned int fuckp[3];
};
typedef struct student {
unsigned int sex;
unsigned int fu;
unsigned int age;
}STU;
int main() {
STU aa;
aa.sex = 100;
aa.fu = 1;
aa.age = 10;
struct test fuck;
((struct student*)&fuck)->sex = 1000;
((struct student*)&fuck)->fu = 992;
((struct student*)&fuck)->age = 929;
printf("aa.sex %d aa.fu %d\n", aa.sex, aa.fu);
printf("((struct student *)&fuck 0x%08x \n", ((struct student*)&fuck));
printf("aa 0x%08x,fuck 0x%08x\n", &aa, &fuck);
printf("fuck.fu0 %d fuck1 %d\n", fuck.fuckp[0], fuck.fuckp[1]);
printf("fuck.fu3 %d\n", fuck.fuckp[2]);
printf("aa.sex %d aa.fu %d\n", aa.sex, aa.fu);
return 0;
}
输出如下
aa.sex 100 aa.fu 1
((struct student *)&fuck 0xe42ff818
aa 0xe42ff7e8,fuck 0xe42ff818
fuck.fu0 1000 fuck1 992
fuck.fu3 929
aa.sex 100 aa.fu 1
给aa赋值后,然后强制转换fuck为struct student类型,然后赋值,aa 和 fuck 的地址并不相同
打印结果表明,强制转换的结果只是利用struct student的成员赋值,然后保存到自己的结构中,并不会改变原结构中的内容,最后能达到取值利用的效果