忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1109 | 回复: 2

[内核入门] 点位符,union一起使用,结果好意外 [复制链接]

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2018-06-05 14:53 |显示全部楼层
  1. #include <stdio.h>


  2. struct test {
  3.     union {
  4.         unsigned int type:8,
  5.                           length:24;
  6.         struct {
  7.             unsigned char type;
  8.             unsigned char length[3];
  9.         } shadow;
  10.     } v;
  11. };

  12. int main()
  13. {
  14.     struct test t;

  15.     t.v.type = 1;
  16.     t.v.length = 0x020304;

  17.     printf("%u, %u\n", t.v.type, t.v.length);
  18.     return 0;
  19. }
复制代码


论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2018-06-05 14:55 |显示全部楼层
回复 1# _nosay

把结构体里的shadow注释掉,也是一样的结果,怎么破?

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2018-06-05 20:14 |显示全部楼层
回复 2# _nosay
unsigned int type:8,
                  length:24;
不是一个整体,也被"union"了。。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP