📄 subject_62705.htm
字号:
<p>
序号:62705 发表者:zadanok 发表日期:2003-11-28 10:45:33
<br>主题:俺就不明白了?
<br>内容:在同一编辑器下::<BR><BR>struct person<BR>{<BR> char name[10];<BR> char addr[15];<BR>}stud;<BR>..<BR>sizeof (stud.name)的值为10,sizeof (stud.addr)的值为15,sizeof(stud)的值为25;因为10+15=25,所以我明白,但:<BR>struct student_type<BR>{<BR> char name[10];<BR> int num;<BR> int age;<BR> char addr[15];<BR>}stud;<BR>sizeof (stud.name)的值为10,sizeof (stud.num)的值为4,<BR>sizeof (stud.age)的值为4,sizeof (stud.addr)的值为15,<BR>sizeof (stud)的值为36<BR>因为10+4+4+15=33不等于36,所以俺不明白了!<BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:michael 回复日期:2003-11-28 10:54:35
<br>内容: 这里有个字节对齐的问题。因为我们的CPU都是32位的,一次可以处理4个字节(4X8=32)。所以CPU不可能只读一个字节。一读就是4个所以应该是36。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zadanok 回复日期:2003-11-28 10:57:36
<br>内容:多谢指教!<BR>我知道,我本来也是怎样以为的,但是<BR>struct student_type<BR>{<BR> char name[10];<BR> char addr[15];<BR>}stud;<BR>为什么就是10+15=25呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:Cxt_ann 回复日期:2003-11-28 11:06:41
<br>内容:等于29啊,我试了。<BR><BR><BR>sizeof操作符作用是返回一个对象或类型名的字节长度。当用在数组上时,他返回整个数组的字节长度,而不是第一个元素的长度。<BR>例如,你的程序中:char name[10],如果是sizeof(char),则结果是1,因为char型数据占据1个字节(因系统而异)但是由于name是一个数组,包含10个char型数据,所以sizeof(stud.name)返回10。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zadanok 回复日期:2003-11-28 11:11:25
<br>内容:你是在DOS环境下测试的,的确,在DOS下没错,但在windows下问题就出来了,你可以在vc的console下试试问题就出来了!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:大青蛙 回复日期:2003-11-28 11:44:32
<br>内容:造成上面结果的异同:<BR>1:操作环境的不一样,可能是基于98(asc字符),可能是基于2000(unicode字符)<BR>2:编译器的不一样,在处理字符的时候也不一样<BR>具体为什么有33和36的差距呢??<BR>的却zadanok在测试全是char 时候,编译器储存char的时候是一个一个字节储存的,所以是25的长度;在测试第二个的时候,{<BR> char name[10];<BR> int num;<BR> int age;<BR> char addr[15];<BR><BR>char name[10],的却占的10个字节的长度,但是后面的是int 占4个字节,这是machael说得很对,是个cpu对其问题,为什么呢,你想,cpu一次读int 4个字节才能得到int 的value,在char存储后剩2个字节,编译器载编译的时候就自动往后2个字节,所以在13的位置上才储存int num,<BR>同样 int age 也是4个,这样就20字节,char addr[15],20+15=35,错了?没有,同样是对其的问题?如果你换成char addr[14],得到的结果是36,那就是对其的问题,如果不是你再发贴,我再帮你看看,。。<BR><BR>同样 <BR>char name[9];<BR> int num;<BR> int age;<BR> char addr[13];<BR><BR>长度为36<BR>但是<BR>char name[8];<BR> int num;<BR> int age;<BR> char addr[12];<BR>长度为28<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:zadanok 回复日期:2003-11-28 11:59:07
<br>内容:照你这种说法只会多出两个字节(在name后,因为要读取4个字节的num)<BR>所以sizeof (stud)应该是10+2+4+4+15 = 35;<BR>而测试结果是sizeof (stud) = 36;<BR><BR><BR><BR>2003-11-28 12:01:32
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -