﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-信心比金钱更重要！-随笔分类-C++基础</title><link>http://www.cppblog.com/luofeng225/category/6065.html</link><description>目标明确==&gt;&gt;&gt;计划跟踪==&gt;&gt;&gt;行动执行！</description><language>zh-cn</language><lastBuildDate>Fri, 23 Mar 2012 13:09:34 GMT</lastBuildDate><pubDate>Fri, 23 Mar 2012 13:09:34 GMT</pubDate><ttl>60</ttl><item><title>void指针</title><link>http://www.cppblog.com/luofeng225/archive/2012/03/16/168038.html</link><dc:creator>luofeng</dc:creator><author>luofeng</author><pubDate>Fri, 16 Mar 2012 00:40:00 GMT</pubDate><guid>http://www.cppblog.com/luofeng225/archive/2012/03/16/168038.html</guid><wfw:comment>http://www.cppblog.com/luofeng225/comments/168038.html</wfw:comment><comments>http://www.cppblog.com/luofeng225/archive/2012/03/16/168038.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luofeng225/comments/commentRss/168038.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luofeng225/services/trackbacks/168038.html</trackback:ping><description><![CDATA[<div><div><strong>void指针</strong><br /></div><div>指针有两个属性：指向变量 / 对象的地址和长度（长度也可以理解成大小）</div><div>但是指针只存储地址,长度则取决于指针的类型，编译器根据指针的类型从指针指向的地址向后寻址</div><div></div><div>指针类型不同则寻址范围也不同,比如：</div><div>int*从指定地址向后寻找4字节作为变量的存储单元&nbsp;</div><div>double*从指定地址向后寻找8字节作为变量的存储单元&nbsp;</div><div></div><div>1.void指针是一种特别的指针&nbsp;</div><div>　　void *vp&nbsp;</div><div>　　//说它特别是因为它没有类型&nbsp;</div><div>　　//或者说这个类型不能判断出指向对象的长度&nbsp;</div><div></div><div>2.任何指针都可以赋值给void指针&nbsp;</div><div>　　type *p;&nbsp;</div><div>　　vp=p;&nbsp;</div><div>　　//不需转换&nbsp;</div><div>　　//只获得变量/对象地址而不获得大小&nbsp;<br /><br /><br /><div>http://www.cnblogs.com/TravelingLight/archive/2011/01/02/1924078.html</div><br /><br /></div></div><img src ="http://www.cppblog.com/luofeng225/aggbug/168038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luofeng225/" target="_blank">luofeng</a> 2012-03-16 08:40 <a href="http://www.cppblog.com/luofeng225/archive/2012/03/16/168038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sizeof()用法汇总</title><link>http://www.cppblog.com/luofeng225/archive/2008/01/26/41945.html</link><dc:creator>luofeng</dc:creator><author>luofeng</author><pubDate>Sat, 26 Jan 2008 12:20:00 GMT</pubDate><guid>http://www.cppblog.com/luofeng225/archive/2008/01/26/41945.html</guid><wfw:comment>http://www.cppblog.com/luofeng225/comments/41945.html</wfw:comment><comments>http://www.cppblog.com/luofeng225/archive/2008/01/26/41945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/luofeng225/comments/commentRss/41945.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/luofeng225/services/trackbacks/41945.html</trackback:ping><description><![CDATA[<a href="http://blog.programfan.com/article.asp?id=19802">http://blog.programfan.com/article.asp?id=19802</a><br>sizeof()功能：计算数据空间的字节数<br>1.与strlen()比较<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strlen()计算字符数组的字符数，以"\0"为结束判断，不计算为'\0'的数组元素。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而sizeof计算数据（包括数组、变量、类型、结构体等）所占内存空间，用字节数表示。<br>2.指针与静态数组的sizeof操作<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。<br><strong><font color=#000000>注意</font></strong>：int *p; sizeof(p)=4;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但sizeof(*p)相当于sizeof(int);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对于静态数组，sizeof可直接计算数组大小；<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例：int a[10];char b[]="hello";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sizeof(a)等于4*10=40;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizeof(b)等于6;<br>&nbsp;<strong>注意</strong>：数组做型参时，数组名称当作指针使用！！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void&nbsp; fun(char p[])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{sizeof(p)等于4}&nbsp;<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">经典问题：&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a)[</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">][</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">];&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;4&nbsp;a为指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;72&nbsp;*a为一个有3*6个指针元素的数组</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">**</span><span style="COLOR: #000000">a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;24&nbsp;**a为数组一维的6个指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">***</span><span style="COLOR: #000000">a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;4&nbsp;***a为一维的第一个指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #0000ff">sizeof</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">****</span><span style="COLOR: #000000">a)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;8&nbsp;****a为一个double变量<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><font size=3><span class=tpccontent1><span class=tpccontent1><strong>问题解析：</strong></span>a</span></font></span><font size=3><font face=Verdana><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是一个很奇怪的定义，他表示一个指向</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double*[3][6]</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型数组的指针。既然是指针，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(a)</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">就是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span>&nbsp;</span></font></font><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1><font size=3><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></span><font face=Verdana><font size=3><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">既然</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是执行</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double*[3][6]</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型的指针，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">*a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">就表示一个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double*[3][6]</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的多维数组类型，因此</span></span></font><font size=3><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(*a)=3*6*sizeof(double*)=72</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。同样的，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">**a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">表示一个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double*[6]</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型的数组，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(**a)=6*sizeof&nbsp; (double*)=24</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">***a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">就表示其中的一个元素，也就是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double*</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">了，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(***a)=4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。至于</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">****a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，就是一个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">了，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(****a)=sizeof(double)=8<br><br><font size=3>3.格式的写法<br>&nbsp;&nbsp;&nbsp;sizeof操作符，对变量或对象可以不加括号，但若是类型，须加括号。<br>4.使用sizeof时string的注意事项<br>&nbsp;&nbsp;&nbsp;string s="hello";<br>&nbsp;&nbsp;&nbsp;sizeof(s)等于string类的大小，sizeof(s.c_str())得到的是与字符串长度。<br>5.union 与struct的空间计算<br>&nbsp;&nbsp;&nbsp;总体上遵循两个原则：<br>&nbsp;&nbsp;&nbsp;(1)整体空间是 </font><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=Verdana size=3>占用空间最大的成员（的类型）所占字节数的整倍数<br>&nbsp;&nbsp; (2)数据对齐原则----内存按结构成员的先后顺序排列，当排到该成员变量时，其前面已摆放的空间大小必须是该成员类型大小的整倍数，如果不够则补齐，以此向后类推。。。。。<br>&nbsp;&nbsp; 注意：数组按照单个变量一个一个的摆放，而不是看成整体。如果成员中有自定义的类、结构体，也要注意数组问题。<br><br><strong>例：[</strong>引用其他帖子的内容]<br><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">因为对齐问题使结构体的</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">变得比较复杂，看下面的例子：</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">(</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">默认对齐方式下</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">)</span></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1>struct s1</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>char a;</span><br><span class=tpccontent1>double b;</span><br><span class=tpccontent1>int c;</span><br><span class=tpccontent1>char d; </span><br><span class=tpccontent1>};</span><br><br><span class=tpccontent1>struct s2</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>char a;</span><br><span class=tpccontent1>char b;</span><br><span class=tpccontent1>int c;</span><br><span class=tpccontent1>double d;</span><br><span class=tpccontent1>};</span><br><br><span class=tpccontent1>cout&lt;&lt;sizeof(s1)&lt;&lt;endl; // 24</span><br><span class=tpccontent1>cout&lt;&lt;sizeof(s2)&lt;&lt;endl; // 16</span><br><span class=tpccontent1>&nbsp; </span><font face=Verdana><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">同样是两个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">char</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型，一个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">int</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型，一个</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型，但是因为<font face=Verdana>对齐</font>问题，导致他们的大小不同。计算结构体大小可以采用元素摆放法，我举例子说明一下：首先，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">CPU</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">判断结构体的对界，根据上一节的结论，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界都取最大的元素类型，也就是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型的对界</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。然后开始摆放每个元素。</span></span></font><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1>&nbsp; </span></span><font face=Verdana><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">对于</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，首先把</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">放到</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界，假定是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">0</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，此时下一个空闲的地址是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，但是下一个元素</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">类型，要放到</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界上，离</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最接近的地址是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">了，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">被放在了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，此时下一个空闲地址变成了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">16</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个元素</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">c</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">16</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">可以满足，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">c</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">放在了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">16</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，此时下一个空闲地址变成了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">20</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个元素</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">需要对界</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，也正好落在对界上，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">放在了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">20</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，结构体在地址</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">21</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">处结束。由于</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的大小需要是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的倍数，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">21-23</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的空间被保留，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的大小变成了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">24</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span></span></font><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1>&nbsp; </span></span><font face=Verdana><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">对于</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，首先把</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">a</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">放到</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界，假定是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">0</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，此时下一个空闲地址是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个元素的对界也是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">b</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">摆放在</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个空闲地址变成了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">；下一个元素</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">c</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，所以取离</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">最近的地址</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">摆放</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">c</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个空闲地址变成了</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，下一个元素</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对界是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，所以</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">d</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">摆放在</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，所有元素摆放完毕，结构体在</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">15</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">处结束，占用总空间为</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">16</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，正好是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的倍数。<br><br><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=Verdana>这里有个陷阱，对于结构体中的结构体成员，不要认为它的对齐方式就是他的大小，看下面的例子：</font></span></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1>struct s1</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>char a[8];</span><br><span class=tpccontent1>};</span><br><br><span class=tpccontent1>struct s2</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>double d;</span><br><span class=tpccontent1>};</span><br><br><span class=tpccontent1>struct s3</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>s1 s;</span><br><span class=tpccontent1>char a;</span><br><span class=tpccontent1>};</span><br><br><span class=tpccontent1>struct s4</span><br><span class=tpccontent1>{</span><br><span class=tpccontent1>s2 s;</span><br><span class=tpccontent1>char a; </span><br><span class=tpccontent1>};</span><br><span class=tpccontent1>cout&lt;&lt;sizeof(s1)&lt;&lt;endl; // 8</span><br><span class=tpccontent1>cout&lt;&lt;sizeof(s2)&lt;&lt;endl; // 8</span><br><span class=tpccontent1>cout&lt;&lt;sizeof(s3)&lt;&lt;endl; // 9</span><br><span class=tpccontent1>cout&lt;&lt;sizeof(s4)&lt;&lt;endl; // 16;</span><br><br>&nbsp; s1<font face=Verdana><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">大小虽然都是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，但是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">的对齐方式是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">，</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s2</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">是</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">8</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">（</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">），所以在</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s3</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">和</span></span><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">s4</span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">中才有这样的差异。</span></span></font><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><span class=tpccontent1>&nbsp; </span></span><span class=tpccontent1><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana"><font face=Verdana>所以，在自己定义结构体的时候，如果空间紧张的话，最好考虑对齐因素来排列结构体里的元素。<br><font size=3><strong>补充：</strong>不要让double干扰你的位域 <br>　　在结构体和类中，可以使用位域来规定某个成员所能占用的空间，所以使用位域能在一定程度上节省结构体占用的空间。不过考虑下面的代码：<br>struct s1 <br>{ <br>　int i: 8; <br>　int j: 4; <br>　double b; <br>　int a:3; <br>}; <br><br>struct s2 <br>{ <br>　int i; <br>　int j; <br>　double b; <br>　int a; <br>}; <br><br>struct s3 <br>{ <br>　int i; <br>　int j; <br>　int a; <br>　double b; <br>}; <br><br>struct s4 <br>{ <br>　int i: 8; <br>　int j: 4; <br>　int a:3; <br>　double b; <br>}; <br><br>cout&lt;&lt;sizeof(s1)&lt;&lt;endl; // 24 <br>cout&lt;&lt;sizeof(s2)&lt;&lt;endl; // 24 <br>cout&lt;&lt;sizeof(s3)&lt;&lt;endl; // 24 <br>cout&lt;&lt;sizeof(s4)&lt;&lt;endl; // 16 <br></font><br><font size=3>　　可以看到，有double存在会干涉到位域（sizeof的算法参考上一节），所以使用位域的的时候，最好把float类型和double类型放在程序的开始或者最后。</font><br><br>相关参数：<br><font size=3>sizeof int:4<br>sizeof short:2<br>sizeof long:4<br>sizeof float:4<br>sizeof double:8<br>sizeof char:1<br>sizeof p:4<br>sizeof WORD:2<br>sizeof DWORD:4</font></font></span></span></span></span></span></font></span></font></span></span></span></span></font></font> 
<img src ="http://www.cppblog.com/luofeng225/aggbug/41945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/luofeng225/" target="_blank">luofeng</a> 2008-01-26 20:20 <a href="http://www.cppblog.com/luofeng225/archive/2008/01/26/41945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>