| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 493 人关注过本帖
标题:关于sizeof问题
收藏  订阅  推荐  打印 
流星雨
Rank: 4
等级:高级会员
帖子:731
积分:7632
注册:2004-5-30
关于sizeof问题

struct{int day; char mouth; int year;}a, *b;

b=&a;

sizeof(a)的值是5,因为INT为2,CHAR为1,INT为2,故而为5,

请问sizeof(b)为多少?答案是2,请问如何得来?请指教!

搜索更多相关主题的帖子: sizeof  
2004-9-11 23:12
Knocker
Rank: 12Rank: 12Rank: 12
等级:贵宾
威望:36
帖子:9963
积分:324662
注册:2004-6-1

b是指针,16位机上即为2。

若sizeof(*b)与sizeof(a)同。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-9-11 23:23
young
Rank: 2
等级:注册会员
帖子:174
积分:1938
注册:2004-9-5

sizeof(b); 由于b是一个指针变量,我们就来说一下指针变量的sizeof 你应该知道指针是一个很重要的概念,它记录了另一个对象的地址。既然是来存放地址的,那么它的长度等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值是4(以字节为单位,如在VC++中就是4),而你计算出2应该是在16位的dos环境下的编译器吧(比如TC),由此我们可以推测64位系统中指针变量的sizeof结果为8。 关于sizeof确实使很多人迷惑,程序员怕用他但不得不用它,看看下面这篇文章,可能会帮你理解的: http://englep.yculblog.com/post-103445.html


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-9-11 23:52
空前
Rank: 6Rank: 6
等级:金牌会员
帖子:1145
积分:11600
注册:2004-5-11

高人,楼上的

2004-9-12 13:28
流星雨
Rank: 4
等级:高级会员
帖子:731
积分:7632
注册:2004-5-30

谢了,各位C界前辈,感谢大家帮助!

蒹葭苍苍,白露为霜。所谓伊人,在水一方。溯洄从之,道阻且长。溯游从之,宛在中央。
2004-9-12 21:16
kuangjingbo
Rank: 3Rank: 3
等级:中级会员
帖子:312
积分:3220
注册:2004-4-24

young说的基本正确

另外,在struct{int day; char mouth; int year;}a, *b; 中,

sizeof(a)并不一定等于sizeof(a.day)+sizeof(a.mouth)+sizeof(a.year)

在32位机器中,sizeof(a)有可能是9或者10或者12或者16,跟你选择的编译器的对齐方式有关。

关于vc中的sizeof的情况请看:

http://websx.home.zccn.net/bbs/dispbbs.asp?boardid=56&id=5233


永不放弃!
2004-9-12 23:43
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.050574 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved