免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zhhui2000
打印 上一主题 下一主题

给大家出个题做做. [复制链接]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
11 [报告]
发表于 2006-10-16 09:24 |只看该作者
改成这样吗?结果就不一样了.
前提:sizeof(int) = 2

1).

struct {
        int i : 8;
        int j : 8;
} __attribute__ ((packed)) aaa;

here sizeof(aaa) is __ byte  <--

2).

union {
        int i : 8;
        int j : 8;
} __attribute__ ((packed)) aaa;

here sizeof(aaa) is __ bytes. <--

论坛徽章:
0
12 [报告]
发表于 2006-10-16 10:33 |只看该作者
原帖由 ssffzz1 于 2006-10-16 09:24 发表
改成这样吗?结果就不一样了.
前提:sizeof(int) = 2

1).

struct {
        int i : 8;
        int j : 8;
} __attribute__ ((packed)) aaa;

here sizeof(aaa) is __ byte  <--

2).

union { ...

第一题2
第二题1

论坛徽章:
0
13 [报告]
发表于 2006-10-16 12:30 |只看该作者
有可能会用到第二种用法吗,i,j 都是int 型的还做什么union?
~~~~~~~~~~~~
会的,如下情况会出现这种写法。

union {
    int name1;
    int name2;
}
当你开始写程序的时候,这个变量命名为NAME1,过了一段时间,你发现这个命名不爽,需要修改为NAME2的时候,你的一部分程序改了,但是另外一部分程序没改,所以这个办法就有用了,这里相当于给一个变量起了2个名字。
类似的办法还有。
typedef struct {
  int  len;
.....
}xxx;
typedef struct {
  union{
      int  len;
      struct {
        short len;
        short count;
    };
};
.....
}xxx2;
这里xxx1到xxx2 ,把len这个变量分解了。对于网络传输可能会用到。

论坛徽章:
0
14 [报告]
发表于 2006-10-16 13:00 |只看该作者
不论怎样,都要提升到整型,所以sizeof结果都一样
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP