结构体强转联合体笔记
来源:互联网 发布:php登录简单页面代码 编辑:程序博客网 时间:2024/06/06 02:05
结构体强制转换为联合体笔记
测试代码1
int main(){ //首先创建一个联合体,联合体内有两个结构体 typedef union { struct { unsigned int i_ia = 0; char buffer[32] = "a"; } va_4byte; struct { unsigned int i_ib = 2; char bufferb[32] = "b"; unsigned int i_ic = 2; } va_compress; } union_test; //测试联合体的大小:为40个字节 int i_size = sizeof(union_test); //打印联合体大小 printf("%d \n", i_size); //定义一个结构体,结构体大小为36个字节 struct MyStruct { int abx = 1; char m_buff[32] = "hello"; } m_struct; struct MyStruct * p = &m_struct; //测试结果 printf("ia = %d \n",((union_test*)(p))->va_4byte.i_ia);//1 printf("ia = %s \n", ((union_test*)(p))->va_4byte.buffer);//hello printf("%d\n", ((union_test*)(p))->va_compress.i_ib);//1 printf("%d\n", ((union_test*)(p))->va_compress.i_ic);//-858993460 printf("%s\n", ((union_test*)(p))->va_compress.bufferb);//hello
强转后结果分析
- 联合体具有40个字节大小,结构体只有32个字节
当测试ia的时候,结构体32个字节,正好覆盖union的前32个字节,所以第一个结构体能够打印出正确信息
-当测试ib的时候,结构体32个字节,正好覆盖union的前32个字节,后4个字节没有覆盖,所以打印出乱乱的东西。测试代码2
int main(){ typedef union { struct { unsigned int i_ia = 0; char buffer[32] = "a";//不相同的地方***************** struct { unsigned int i_ib = 2; unsigned int i_ic = 2; char bufferb[32] = "b"; } va_compress; } union_test;//**************************//测试联合体的大小:为40个字节 int i_size = sizeof(union_test); printf("%d \n", i_size); struct MyStruct { int abx = 1; char m_buff[32] = "hello"; } m_struct; struct MyStruct * p = &m_struct; //测试结果 printf("ia = %d \n",((union_test*)(p))->va_4byte.i_ia);//1 printf("ia = %s \n", ((union_test*)(p))->va_4byte.buffer);//hello printf("%d\n", ((union_test*)(p))->va_compress.i_ib);//1 printf("%d\n", ((union_test*)(p))->va_compress.i_ic);//181043167 printf("%s\n", ((union_test*)(p))->va_compress.bufferb);//o // return 0;}
测试结果2
- ia的数据跟原来的一样
- ib的记录跟原来一样
- ic的记录变为乱码
bufferb的记录,只有一个o,因为前4个字节被赋值给ib了。
综上所述:
struct强转为union的时候,会从头开始覆盖,unicon多出来的部分不进行覆盖。
如果union比struct小的话,就会被截断
1 0
- 结构体强转联合体笔记
- C语言学习笔记10-结构体、枚举、联合体
- C/C++学习笔记4 结构体联合体枚举
- 结构体和联合体
- 结构体和联合体
- 结构体、联合体复习
- 结构体,联合体
- C++结构体、联合体
- 结构体和联合体
- 结构体和联合体
- 结构体、联合体、枚举
- sizeof(结构体/联合体)
- 结构体、联合体、枚举
- 结构体和联合体
- 结构体和联合体
- 联合体和结构体
- 结构体和联合体
- 结构体联合体
- 基于 flask 框架的模拟instagram 图片分享网站的开发 5(发布网站v1.0版本)
- Yii2之activeform部分随笔
- android 根据证书生成对应的签名文件
- iOS 发送的位置能调用本机地图导航资料整理
- hbase-site.xml 和 hbase-default.xml
- 结构体强转联合体笔记
- Android Socket通信
- 盒子放球问题
- 数据结构关于AOV与AOE网的区别
- Python文件的存取
- MySQL 5.7.13-winx64.zip安装笔记
- AMD和CMD的"同步"加载方式原理
- 【Python学习笔记】IO编程:操作文件和目录
- PHP SPL标准库之SplStack简介