﻿<?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++博客-Welcome to Leon's Blog-随笔分类-c++学习</title><link>http://www.cppblog.com/Leon916/category/8420.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 13 Sep 2009 12:11:57 GMT</lastBuildDate><pubDate>Sun, 13 Sep 2009 12:11:57 GMT</pubDate><ttl>60</ttl><item><title>归并排序</title><link>http://www.cppblog.com/Leon916/archive/2009/09/13/96034.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Sun, 13 Sep 2009 02:28:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2009/09/13/96034.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/96034.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2009/09/13/96034.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/96034.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/96034.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;昨天在csdn上看到这个<a href="http://topic.csdn.net/u/20090907/22/34928e80-ba15-4f4a-9b5f-af40670f20d2.html?seed=719030250&amp;r=59759244#r_59759244">帖子</a>，是关于归并排序的，发现错误很隐蔽（在我看来），后来经过调试和跟踪才找到了这个错误。结果是一个很简单的逻辑问题，自己太笨了，花了3、4个小时。哎，还是看程序时粗枝大叶！
<img src ="http://www.cppblog.com/Leon916/aggbug/96034.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2009-09-13 10:28 <a href="http://www.cppblog.com/Leon916/archive/2009/09/13/96034.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>STL源码阅读1</title><link>http://www.cppblog.com/Leon916/archive/2009/09/11/95969.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Fri, 11 Sep 2009 14:04:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2009/09/11/95969.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/95969.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2009/09/11/95969.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/95969.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/95969.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于工作需要，这两天看看了STL的源代码，发现里面有很多的技巧和技术，以及C++语言的使用，有一种震撼的感觉。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单总结一下： 目前看到的技巧有：traite技术，仿函数（<font face=宋体>仿函数都是定义了</font><span lang=EN-US><font face="Times New Roman">()</font></span><span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">函数运算操作符的类</span>）。关于仿函数可以参看<a href="http://blog.csdn.net/kingofbirdzjy/archive/2007/12/10/1926653.aspx">http://blog.csdn.net/kingofbirdzjy/archive/2007/12/10/1926653.aspx</a>。
<img src ="http://www.cppblog.com/Leon916/aggbug/95969.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2009-09-11 22:04 <a href="http://www.cppblog.com/Leon916/archive/2009/09/11/95969.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>重新开始</title><link>http://www.cppblog.com/Leon916/archive/2009/09/11/95945.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Fri, 11 Sep 2009 09:08:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2009/09/11/95945.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/95945.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2009/09/11/95945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/95945.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/95945.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好长时间没有写程序了，敲代码+调试花了我2个小时时间，就为了一道特简单题目（acm3299），以后要多多锻炼才行。<br>&nbsp;代码如下：
<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"><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">math.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;E&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2.718281828</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;argc,&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">argv[])<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img id=Codehighlighter1_101_1004_Open_Image onclick="this.style.display='none'; Codehighlighter1_101_1004_Open_Text.style.display='none'; Codehighlighter1_101_1004_Closed_Image.style.display='inline'; Codehighlighter1_101_1004_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_101_1004_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_101_1004_Closed_Text.style.display='none'; Codehighlighter1_101_1004_Open_Image.style.display='inline'; Codehighlighter1_101_1004_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_101_1004_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_101_1004_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;t,&nbsp;d,&nbsp;h,&nbsp;e,&nbsp;hh;<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;index;<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;temp;<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(&nbsp;(scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">temp)&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">&amp;&amp;</span><span style="COLOR: #000000">&nbsp;(temp&nbsp;</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">E</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">))<br></span><span style="COLOR: #008080">13</span><span style="COLOR: #000000"><img id=Codehighlighter1_204_991_Open_Image onclick="this.style.display='none'; Codehighlighter1_204_991_Open_Text.style.display='none'; Codehighlighter1_204_991_Closed_Image.style.display='inline'; Codehighlighter1_204_991_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_204_991_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_204_991_Closed_Text.style.display='none'; Codehighlighter1_204_991_Open_Image.style.display='inline'; Codehighlighter1_204_991_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_204_991_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_204_991_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">14</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">15</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">&nbsp;;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br></span><span style="COLOR: #008080">16</span><span style="COLOR: #000000"><img id=Codehighlighter1_251_524_Open_Image onclick="this.style.display='none'; Codehighlighter1_251_524_Open_Text.style.display='none'; Codehighlighter1_251_524_Closed_Image.style.display='inline'; Codehighlighter1_251_524_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_251_524_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_251_524_Closed_Text.style.display='none'; Codehighlighter1_251_524_Open_Image.style.display='inline'; Codehighlighter1_251_524_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_251_524_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_251_524_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">17</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(temp)<br></span><span style="COLOR: #008080">18</span><span style="COLOR: #000000"><img id=Codehighlighter1_272_498_Open_Image onclick="this.style.display='none'; Codehighlighter1_272_498_Open_Text.style.display='none'; Codehighlighter1_272_498_Closed_Image.style.display='inline'; Codehighlighter1_272_498_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_272_498_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_272_498_Closed_Text.style.display='none'; Codehighlighter1_272_498_Open_Image.style.display='inline'; Codehighlighter1_272_498_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_272_498_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_272_498_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">19</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">T</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">20</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="COLOR: #000000">|=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x1</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">21</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%f</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">t);<br></span><span style="COLOR: #008080">22</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">23</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">D</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">24</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="COLOR: #000000">|=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x2</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">25</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%f</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">d);<br></span><span style="COLOR: #008080">26</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">27</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">H</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">28</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index&nbsp;</span><span style="COLOR: #000000">|=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0x4</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">29</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%f</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">h);<br></span><span style="COLOR: #008080">30</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">31</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">default</span><span style="COLOR: #000000">:<br></span><span style="COLOR: #008080">32</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">--</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">33</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">34</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">35</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%c</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">temp);<br></span><span style="COLOR: #008080">36</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">37</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">switch</span><span style="COLOR: #000000">(index)<br></span><span style="COLOR: #008080">38</span><span style="COLOR: #000000"><img id=Codehighlighter1_544_942_Open_Image onclick="this.style.display='none'; Codehighlighter1_544_942_Open_Text.style.display='none'; Codehighlighter1_544_942_Closed_Image.style.display='inline'; Codehighlighter1_544_942_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_544_942_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_544_942_Closed_Text.style.display='none'; Codehighlighter1_544_942_Open_Image.style.display='inline'; Codehighlighter1_544_942_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_544_942_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_544_942_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">39</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br></span><span style="COLOR: #008080">40</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">:&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">&nbsp;t&nbsp;d</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">41</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6.11</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;exp(</span><span style="COLOR: #000000">5417.7530</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(d</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">))));<br></span><span style="COLOR: #008080">42</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hh&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">0.5555</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(e&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10.0</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #008080">43</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;t&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;hh;<br></span><span style="COLOR: #008080">44</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">45</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">d,&nbsp;h&nbsp;----t</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">46</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">6.11</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;exp(</span><span style="COLOR: #000000">5417.7530</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">(d</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">))));<br></span><span style="COLOR: #008080">47</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;h&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.5555</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;(e&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10.0</span><span style="COLOR: #000000">);&nbsp;<br></span><span style="COLOR: #008080">48</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">49</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">case</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">t&nbsp;h&nbsp;---d</span><span style="COLOR: #008000"><br></span><span style="COLOR: #008080">50</span><span style="COLOR: #008000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">double</span><span style="COLOR: #000000">&nbsp;e;<br></span><span style="COLOR: #008080">51</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;(h</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">t)</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">0.5555</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">10.0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">52</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">((</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;(log(e</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">6.11</span><span style="COLOR: #000000">))</span><span style="COLOR: #000000">/</span><span style="COLOR: #000000">5417.753</span><span style="COLOR: #000000">)&nbsp;</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">273.16</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">53</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">54</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">55</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">T&nbsp;%.1f&nbsp;D&nbsp;%.1f&nbsp;H&nbsp;%.1f\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,&nbsp;t,&nbsp;d,&nbsp;h);<br></span><span style="COLOR: #008080">56</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">57</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">58</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">59</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span></div>
<img src ="http://www.cppblog.com/Leon916/aggbug/95945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2009-09-11 17:08 <a href="http://www.cppblog.com/Leon916/archive/2009/09/11/95945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言文件读写</title><link>http://www.cppblog.com/Leon916/archive/2009/04/10/79456.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Fri, 10 Apr 2009 03:02:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2009/04/10/79456.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/79456.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2009/04/10/79456.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/79456.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/79456.html</trackback:ping><description><![CDATA[今天写了一个关于C语言读写的小程序，代码如下：<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">file;<br>&nbsp;&nbsp;&nbsp;&nbsp;FILE&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">fw;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;(file&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">main.cpp</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">r</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(&nbsp;(fw&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;fopen(</span><span style="color: #000000;">"</span><span style="color: #000000;">text.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">wt</span><span style="color: #000000;">"</span><span style="color: #000000;">))&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;ch;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(&nbsp;(ch</span><span style="color: #000000;">=</span><span style="color: #000000;">fgetc(file))&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;EOF&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fputc(ch,&nbsp;fw);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">%c</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;ch);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;fclose(file);<br>&nbsp;&nbsp;&nbsp;&nbsp;fclose(fw);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">char&nbsp;ch[LEN]&nbsp;=&nbsp;{0};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">while(&nbsp;!feof(file)&nbsp;)<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;fread(ch,&nbsp;sizeof(char),&nbsp;LEN-1,&nbsp;file);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;printf("%s",&nbsp;ch);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;fwrite(ch,&nbsp;sizeof(char),&nbsp;LEN-1,&nbsp;fw);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;memset(ch,&nbsp;0,&nbsp;sizeof(char)*LEN);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">}</span></div>
这是用通过调用c语言的库文件来实现。<br>以下是用C++的中的stream来实现的，但是在处理中文的时候，会出现一些乱码。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">fstream&nbsp;fs;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;fs.open(_T("文本.txt"));<br></span><span style="color: #008000;">//</span><span style="color: #008000;"><br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;arr[LEN]&nbsp;=&nbsp;{0};<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;temp[2*LEN+1]&nbsp;=&nbsp;{0};<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;length;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;if(!fs)<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;{<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;&lt;&lt;&nbsp;"Error"&nbsp;&lt;&lt;&nbsp;endl;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;-1;<br></span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">while(!fs.eof())<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;fs.read(arr,&nbsp;sizeof(arr)-1);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;length&nbsp;=&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;0,&nbsp;arr,&nbsp;-1,&nbsp;NULL,&nbsp;NULL);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;MultiByteToWideChar(CP_ACP,&nbsp;0,&nbsp;arr,&nbsp;-1,&nbsp;temp,&nbsp;length);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;wcout.imbue(locale("chs"));<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;wcout&nbsp;&lt;&lt;&nbsp;temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">}</span></div>
但是通过char类型进行读写却不出现乱码，感觉很奇怪。<br>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;argc,&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">argv[])<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;fstream&nbsp;fs;<br>&nbsp;&nbsp;&nbsp;&nbsp;fs.open(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">文本.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;fstream&nbsp;fw;<br>&nbsp;&nbsp;&nbsp;&nbsp;fw.open(</span><span style="color: #000000;">"</span><span style="color: #000000;">text.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;arr[LEN]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">0</span><span style="color: #000000;">};<br>&nbsp;&nbsp;&nbsp;&nbsp;wchar_t&nbsp;temp[</span><span style="color: #000000;">2</span><span style="color: #000000;">*</span><span style="color: #000000;">LEN</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;{</span><span style="color: #000000;">0</span><span style="color: #000000;">};<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;length;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">fs&nbsp;</span><span style="color: #000000;">||</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">fw)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Error</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">fs.eof())<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fs.read(arr,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(arr)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;arr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fw.write(arr,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(arr)</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(arr,&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(arr));<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">&nbsp;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;fs.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;fw.close();<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>}</span></div>
<br><br>  <img src ="http://www.cppblog.com/Leon916/aggbug/79456.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2009-04-10 11:02 <a href="http://www.cppblog.com/Leon916/archive/2009/04/10/79456.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个Java的B-Tree源代码</title><link>http://www.cppblog.com/Leon916/archive/2009/03/29/78271.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Sun, 29 Mar 2009 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2009/03/29/78271.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/78271.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2009/03/29/78271.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/78271.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/78271.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 这是我在看一个Java开源软件的时候，发现一个人写的代码，里面有三个函数到现在还没有看懂，先放在blog里面。
<img src ="http://www.cppblog.com/Leon916/aggbug/78271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2009-03-29 15:54 <a href="http://www.cppblog.com/Leon916/archive/2009/03/29/78271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>std:string学习</title><link>http://www.cppblog.com/Leon916/archive/2008/12/05/68694.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Fri, 05 Dec 2008 14:33:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2008/12/05/68694.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/68694.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2008/12/05/68694.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/68694.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/68694.html</trackback:ping><description><![CDATA[<p>之所以抛弃char*的字符串而选用C++标准程序库中的string类，是因为他和前者比较起来，不必担心内存是否足够、字符串长度等等，而且作
为一个类出现，他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作，== 进行比较，+
做串联（是不是很简单?）。我们尽可以把它看成是C++的基本数据类型。<br>&nbsp; &nbsp;好了，进入正题&#8230;&#8230;&#8230;<br>首先，为了在我们的程序中使用string类型，我们必须包含头文件 <string></string>。如下：<br>&nbsp; &nbsp;#include <string></string>//注意这里不是string.h string.h是C字符串头文件<br><br>1．声明一个C++字符串<br>声明一个字符串变量很简单：<br>&nbsp; &nbsp;string Str;<br>这样我们就声明了一个字符串变量，但既然是一个类，就有构造函数和析构函数。上面的声明没有传入参数，所以就直接使用了string的默认的构造函数，这个函数所作的就是把Str初始化为一个空字符串。String类的构造函数和析构函数如下：<br>a) &nbsp; &nbsp;string s; &nbsp;//生成一个空字符串s<br>b) &nbsp; &nbsp;string s(str) //拷贝构造函数 生成str的复制品<br>c) &nbsp; &nbsp;string s(str,stridx) //将字符串str内&#8220;始于位置stridx&#8221;的部分当作字符串的初值<br>d) &nbsp; &nbsp;string s(str,stridx,strlen) //将字符串str内&#8220;始于stridx且长度顶多strlen&#8221;的部分作为字符串的初值<br>e) &nbsp; &nbsp;string s(cstr) //将C字符串作为s的初值<br>f) &nbsp; &nbsp;string s(chars,chars_len) //将C字符串前chars_len个字符作为字符串s的初值。<br>g) &nbsp; &nbsp;string s(num,c) //生成一个字符串，包含num个c字符<br>h) &nbsp; &nbsp;string s(beg,end) //以区间beg;end(不包含end)内的字符作为字符串s的初值<br>i) &nbsp; &nbsp;s.~string() //销毁所有字符，释放内存<br>都很简单，我就不解释了。<br>2．字符串操作函数<br>&nbsp; &nbsp;这里是C++字符串的重点，我先把各种操作函数罗列出来，不喜欢把所有函数都看完的人可以在这里找自己喜欢的函数，再到后面看他的详细解释。<br>a) =,assign() &nbsp; //赋以新值<br>b) swap() &nbsp; //交换两个字符串的内容<br>c) +=,append(),push_back() //在尾部添加字符<br>d) insert() //插入字符<br>e) erase() //删除字符<br>f) clear() //删除全部字符 <br>g) replace() //替换字符<br>h) + //串联字符串<br>i) ==,!=,&lt;,&lt;=,&gt;,&gt;=,compare() &nbsp;//比较字符串<br>j) size(),length() &nbsp;//返回字符数量<br>k) max_size() //返回字符的可能最大个数<br>l) empty() &nbsp;//判断字符串是否为空<br>m) capacity() //返回重新分配之前的字符容量<br>n) reserve() //保留一定量内存以容纳一定数量的字符<br>o) [ ], at() //存取单一字符<br>p) &gt;&gt;,getline() //从stream读取某值<br>q) &lt;&lt; &nbsp;//将谋值写入stream<br>r) copy() //将某值赋值为一个C_string<br>s) c_str() //将内容以C_string返回<br>t) data() //将内容以字符数组形式返回<br>u) substr() //返回某个子字符串<br>v)查找函数<br>w)begin() end() //提供类似STL的迭代器支持<br>x) rbegin() rend() //逆向迭代器<br>y) get_allocator() //返回配置器<br>下面详细介绍：<br>2．1 C++字符串和C字符串的转换<br>&nbsp;
&nbsp;C++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy()，其中，data()以字符数组的形式
返回字符串内容，但并不添加&#8217;\0&#8217;。c_str()返回一个以&#8216;\0&#8217;结尾的字符数组，而copy()则把字符串的内容复制或写入既有的
c_string或字符数组内。C++字符串并不以&#8217;\0&#8217;结尾。我的建议是在程序中能使用C++字符串就使用，除非万不得已不选用c_string。由
于只是简单介绍，详细介绍掠过，谁想进一步了解使用中的注意事项可以给我留言(到我的收件箱)。我详细解释。<br>2．2 大小和容量函数<br>&nbsp;
&nbsp;一个C++字符串存在三种大小：a)现有的字符数，函数是size()和length()，他们等效。Empty()用来检查字符串是否为空。
b)max_size()
这个大小是指当前C++字符串最多能包含的字符数，很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他，应该大小
足够我们用的。但是不够用的话，会抛出length_error异常c)capacity()重新分配内存之前
string所能包含的最大字符数。这里另一个需要指出的是reserve()函数，这个函数为string重新分配内存。重新分配的大小由其参数决定，
默认参数为0，这时候会对string进行非强制性缩减。<br><br>还有必要再重复一下C++字符串和C字符串转换的问题，许多人会遇到这样的问
题，自己做的程序要调用别人的函数、类什么的（比如数据库连接函数Connect(char*,char*)），但别人的函数参数用的是char*形式
的，而我们知道，c_str()、data()返回的字符数组由该字符串拥有，所以是一种const
char*,要想作为上面提及的函数的参数，还必须拷贝到一个char*,而我们的原则是能不使用C字符串就不使用。那么，这时候我们的处理方式是：如果
此函数对参数(也就是char*)的内容不修改的话，我们可以这样Connect((char*)UserID.c_str(),
(char*)PassWD.c_str()),但是这时候是存在危险的，因为这样转换后的字符串其实是可以修改的（有兴趣地可以自己试一试），所以我强
调除非函数调用的时候不对参数进行修改，否则必须拷贝到一个char*上去。当然，更稳妥的办法是无论什么情况都拷贝到一个char*上去。同时我们也祈
祷现在仍然使用C字符串进行编程的高手们（说他们是高手一点儿也不为过，也许在我们还穿开裆裤的时候他们就开始编程了，哈哈&#8230;）写的函数都比较规范，那样
我们就不必进行强制转换了。<br><br>2．3元素存取<br>&nbsp;
&nbsp;我们可以使用下标操作符[]和函数at()对元素包含的字符进行访问。但是应该注意的是操作符[]并不检查索引是否有效（有效索引
0~str.length()），如果索引失效，会引起未定义的行为。而at()会检查，如果使用at()的时候索引无效，会抛出
out_of_range异常。<br>&nbsp; &nbsp;有一个例外不得不说，const string a;的操作符[]对索引值是a.length()仍然有效，其返回值是&#8217;\0&#8217;。其他的各种情况，a.length()索引都是无效的。举例如下：<br>const string Cstr(&#8220;const string&#8221;);<br>string Str(&#8220;string&#8221;);<br><br>Str[3]; &nbsp; &nbsp;//ok<br>Str.at(3); &nbsp;//ok<br><br>Str[100]; //未定义的行为<br>Str.at(100); &nbsp;//throw out_of_range<br><br>Str[Str.length()] &nbsp;//未定义行为<br>Cstr[Cstr.length()] //返回 &#8216;\0&#8217;<br>Str.at(Str.length());//throw out_of_range<br>Cstr.at(Cstr.length()) ////throw out_of_range<br><br>我不赞成类似于下面的引用或指针赋值：<br>char&amp; r=s[2];<br>char* p= &amp;s[3];<br>因为一旦发生重新分配，r,p立即失效。避免的方法就是不使用。<br><br>2．4比较函数<br>&nbsp;
&nbsp;C++字符串支持常见的比较操作符（&gt;,&gt;=,&lt;,&lt;=,==,!=），甚至支持string与C-string的比较(如
str&lt;&#8221;hello&#8221;)。在使用&gt;,&gt;=,&lt;,&lt;=这些操作符的时候是根据&#8220;当前字符特性&#8221;将字符按字典顺序进行逐一得
比较。字典排序靠前的字符小，比较的顺序是从前向后比较，遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小。同
时，string(&#8220;aaaa&#8221;) &nbsp;
&nbsp;另一个功能强大的比较函数是成员函数compare()。他支持多参数处理，支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果，返
回值意义如下：0-相等 〉0-大于 &lt;0-小于。举例如下：<br>&nbsp; &nbsp;string s(&#8220;abcd&#8221;);<br>&nbsp; &nbsp;<br>&nbsp; &nbsp;s.compare(&#8220;abcd&#8221;); //返回0<br>&nbsp; &nbsp;s.compare(&#8220;dcba&#8221;); //返回一个小于0的值<br>&nbsp; &nbsp;s.compare(&#8220;ab&#8221;); //返回大于0的值<br>&nbsp; &nbsp;<br>s.compare(s); //相等<br>&nbsp; &nbsp;s.compare(0,2,s,2,2); //用&#8221;ab&#8221;和&#8221;cd&#8221;进行比较 小于零<br>&nbsp; &nbsp;s.compare(1,2,&#8221;bcx&#8221;,2); //用&#8221;bc&#8221;和&#8221;bc&#8221;比较。<br>怎么样？功能够全的吧！什么？还不能满足你的胃口？好吧，那等着，后面有更个性化的比较算法。先给个提示，使用的是STL的比较算法。什么？对STL一窍不通？靠，你重修吧！<br><br>2．5 更改内容<br>这在字符串的操作中占了很大一部分。<br>首先讲赋值，第一个赋值方法当然是使用操作符=，新值可以是string(如：s=ns) 、c_string(如：s=&#8221;gaint&#8221;)甚至单一字符（如：s=&#8217;j&#8217;）。还可以使用成员函数assign()，这个成员函数可以使你更灵活的对字符串赋值。还是举例说明吧：<br>s.assign(str); //不说<br>s.assign(str,1,3);//如果str是&#8221;iamangel&#8221; 就是把&#8221;ama&#8221;赋给字符串<br>s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给s<br>s.assign(&#8220;gaint&#8221;); //不说<br>s.assign(&#8220;nico&#8221;,5);//把&#8217;n&#8217; &#8216;I&#8217; &#8216;c&#8217; &#8216;o&#8217; &#8216;\0&#8217;赋给字符串<br>s.assign(5,&#8217;x&#8217;);//把五个x赋给字符串<br>把字符串清空的方法有三个：s=&#8221;&#8221;;s.clear();s.erase();(我越来越觉得举例比说话让别人容易懂！)。<br>string提供了很多函数用于插入（insert）、删除（erase）、替换（replace）、增加字符。<br>先说增加字符（这里说的增加是在尾巴上），函数有 +=、append()、push_back()。举例如下：<br>s+=str;//加个字符串<br>s+=&#8221;my name is jiayp&#8221;;//加个C字符串<br>s+=&#8217;a&#8217;;//加个字符<br><br>s.append(str);<br>s.append(str,1,3);//不解释了 同前面的函数参数assign的解释<br>s.append(str,2,string::npos)//不解释了<br><br>s.append(&#8220;my name is jiayp&#8221;);<br>s.append(&#8220;nico&#8221;,5);<br>s.append(5,&#8217;x&#8217;);</p>
<p>&nbsp;</p>
&nbsp;&nbsp;&nbsp; 字符串操作是一个不小的主题,在标准C++中,string字符串类成为一个标准,<span id="txtObj_0">之所以抛弃char*的字符串而选用C++标准程序库中的string类，是因为他和前者比较起来，不必担心内存是否足够、字符串长度等等，而且作为一个类出现，他集成的操作函数足以完成我们大多数情况下的需要.<br>&nbsp;&nbsp;&nbsp; 下面我们首先从一些示例开始学习下string类的使用.<br>1)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s("hehe");<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>2)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; char chs[] = "hehe";<br>&nbsp;&nbsp;&nbsp; string s(chs);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>3)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; char chs[] = "hehe";<br>&nbsp;&nbsp;&nbsp; string s(chs,1,3);&nbsp;&nbsp;&nbsp; //指定从chs的索引1开始,最后复制3个字节<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>4)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s1("hehe");<br>&nbsp;&nbsp;&nbsp; string s2(s1);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s2&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>5)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s1("hehe",2,3);<br>&nbsp;&nbsp;&nbsp; string s2(s1);&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s2&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>6)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; char chs[] = "hehe";<br>&nbsp;&nbsp;&nbsp; string s(chs,3);&nbsp;&nbsp;&nbsp; //将chs前3个字符作为初值构造<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>7)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s(10,'k');&nbsp;&nbsp;&nbsp; //分配10个字符,初值都是'k'<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>//以上是string类实例的构造手段,都很简单.<br><br>9)<br>//赋新值<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s(10,'k');&nbsp;&nbsp;&nbsp; //分配10个字符,初值都是'k'<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s = "hehehehe";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.assign("kdje");<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.assign("fkdhfkdfd",5);&nbsp;&nbsp;&nbsp; //重新分配指定字符串的前5的元素内容<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>10)<br>//swap方法交换<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s1 = "hehe";<br>&nbsp;&nbsp;&nbsp; string s2 = "gagaga";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s1 : "&lt;&lt;s1&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s2 : "&lt;&lt;s2&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s1.swap(s2);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s1 : "&lt;&lt;s1&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s2 : "&lt;&lt;s2&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>11)<br>//+=,append(),push_back()在尾部添加字符<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "hehe";<br>&nbsp;&nbsp;&nbsp; s += "gaga";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.append("嘿嘿");&nbsp;&nbsp;&nbsp; //append()方法可以添加字符串<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.push_back('k');&nbsp;&nbsp;&nbsp; //push_back()方法只能添加一个字符...<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>12)<br>//insert() 插入字符.其实,insert运用好,与其他的插入操作是一样的.<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "hehe";<br>&nbsp;&nbsp;&nbsp; s.insert(0,"头部");&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //在头部插入<br>&nbsp;&nbsp;&nbsp; s.insert(s.size(),"尾部");&nbsp;&nbsp;&nbsp; //在尾部插入<br>&nbsp;&nbsp;&nbsp; s.insert(s.size()/2,"中间");//在中间插入<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>13)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg";<br>&nbsp;&nbsp;&nbsp; s.erase(0,1);&nbsp;&nbsp;&nbsp; //从索引0到索引1,即删除掉了'a'<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; //其实,还可以使用replace方法来执行删除操作<br>&nbsp;&nbsp;&nbsp; s.replace(2,3,"");//即将指定范围内的字符替换成"",即变相删除了<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br><br>14)<br>//clear() 删除全部字符<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.length()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.clear();<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.length()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; //使用earse方法变相全删除<br>&nbsp;&nbsp;&nbsp; s = "dkjfd";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.length()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; s.erase(0,s.length());<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.length()&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>15)<br>//replace() 替换字符<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg";<br>&nbsp;&nbsp;&nbsp; s.replace(2,3,"!!!!!");//从索引2开始3个字节的字符全替换成"!!!!!"<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>16)<br>//==,!=,&lt;,&lt;=,&gt;,&gt;=,compare()&nbsp; 比较字符串<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s1 = "abcdefg";<br>&nbsp;&nbsp;&nbsp; string s2 = "abcdefg";&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (s1==s2)cout&lt;&lt;"s1 == s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else cout&lt;&lt;"s1 != s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (s1!=s2)cout&lt;&lt;"s1 != s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else cout&lt;&lt;"s1 == s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (s1&gt;s2)cout&lt;&lt;"s1 &gt; s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else cout&lt;&lt;"s1 &lt;= s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; if (s1&lt;=s2)cout&lt;&lt;"s1 &lt;= s2"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else cout&lt;&lt;"s1 &gt; s2"&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>17)<br>//size(),length()&nbsp; 返回字符数量<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.size()&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.length()&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>18)<br>//max_size() 返回字符的可能最大个数<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg";<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s.max_size()&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>19)<br>//empty()&nbsp; 判断字符串是否为空<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s ;<br>&nbsp;&nbsp;&nbsp; if (s.empty())<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"s 为空."&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"s 不为空."&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; s = s + "abcdefg";<br>&nbsp;&nbsp;&nbsp; if (s.empty())<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"s 为空."&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"s 不为空."&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>20)<br>// [ ], at() 存取单一字符<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg1111";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"use []:"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;s.length(); i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;s[i]&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"use at():"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; for(int i=0; i&lt;s.length(); i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;s.at(i)&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>21)<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg1111";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; const char * chs1 = s.c_str();<br>&nbsp;&nbsp;&nbsp; const char * chs2 = s.data();<br><br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"use at():"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; int i;<br>&nbsp;&nbsp;&nbsp; for(i=0; i&lt;s.length(); i++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"c_str() : "&lt;&lt;chs1[i]&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;"data() : "&lt;&lt;chs2[i]&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"c_str() : "&lt;&lt;chs1&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"data() : "&lt;&lt;chs2&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>22)<br>// substr() 返回某个子字符串<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg1111";<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; string str = s.substr(5,3);//从索引5开始3个字节<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;str&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>23)<br>// find 查找函数<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg1111";<br>&nbsp;&nbsp;&nbsp; string pattern = "fg";<br>&nbsp;&nbsp;&nbsp; string::size_type pos;<br>&nbsp;&nbsp;&nbsp; pos = s.find(pattern,0);&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //从索引0开始,查找符合字符串"f"的头索引<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;pos&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; string str = s.substr(pos,pattern.size());<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;str&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br>24)<br>// begin() end() 提供类似STL的迭代器支持<br>#include &lt;string&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br><br>void main()<br>{<br>&nbsp;&nbsp;&nbsp; string s = "abcdefg1111";<br>&nbsp;&nbsp;&nbsp; for(string::iterator iter = s.begin(); iter!=s.end(); iter++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cout&lt;&lt;*iter&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;endl;<br><br>&nbsp;&nbsp;&nbsp; cin.get();<br>}<br></span><span id="txtObj_0">&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp; 一个C++字符串存在三种大小：a)现有的字符数，函数是size()和length()，他们等效。
Empty()用来检查字符串是否为空。b)max_size()
这个大小是指当前C++字符串最多能包含的字符数，很可能和机器本身的限制或者字符串所在位置连续内存的大小有关系。我们一般情况下不用关心他，应该大小
足够我们用的。但是不够用的话，会抛出length_error异常c)capacity()重新分配内存之前
string所能包含的最大字符数。这里另一个需要指出的是reserve()函数，这个函数为string重新分配内存。重新分配的大小由其参数决定，
默认参数为0，这时候会对string进行非强制性缩减</span><img src ="http://www.cppblog.com/Leon916/aggbug/68694.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2008-12-05 22:33 <a href="http://www.cppblog.com/Leon916/archive/2008/12/05/68694.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>std::Vector学习</title><link>http://www.cppblog.com/Leon916/archive/2008/12/05/68638.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Fri, 05 Dec 2008 05:21:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2008/12/05/68638.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/68638.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2008/12/05/68638.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/68638.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/68638.html</trackback:ping><description><![CDATA[vector &lt;int&gt; vNew(v);(v是一个vector &lt;int&gt;) <br> 按上面的语法，创建一个vector，是按照v的<span style="color: #ff0000;">实际元素个数</span>创建新vector的。就是说，如果v中元素是1,2,3,那么，vNew中的元素是1,2,3，并且，vNew的<span style="color: #ff0000;">总容量</span>也是3. <br> 也就是：<span style="color: #ff0000;">vNew的总容量取决于v的实际元素个数。</span> <br>  <br> pVec-&gt;clear();  <br> clear()只是删除[first,last)区间中的所有元素，但并不释放其内存。 <br>  <br> (std::vector&nbsp;  &lt;int &gt;)(*pVec) <br> 也就是创建一个临时对象vector &lt;int&gt;，显然，这个临时对象的总容量是取决于*pVec的实际元素个数的，而经过 <br> pVec-&gt;clear();的pVect的实际元素个数是0，因此，pVec- &gt;swap( (std::vector&nbsp;  &lt;int &gt;)(*pVec) ); 将这个临时对象与pVec交换后，它的总容量变成了0。 <br> （vector中的swap()实现的是：将first、last,end_of_storage（总容量）依次交换）。 <br>  <br> 因此，实现了*pVec没使用内存的释放。 <img src ="http://www.cppblog.com/Leon916/aggbug/68638.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2008-12-05 13:21 <a href="http://www.cppblog.com/Leon916/archive/2008/12/05/68638.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>笔试题2</title><link>http://www.cppblog.com/Leon916/archive/2008/10/28/65277.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Tue, 28 Oct 2008 00:54:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2008/10/28/65277.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/65277.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2008/10/28/65277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/65277.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/65277.html</trackback:ping><description><![CDATA[char *p;<br>cout &lt;&lt; sizeof*(p) &lt;&lt; endl;<br>请问这个的输出？<br><br>经过调试，我发现sizeof＊（ｐ）的值是ｐ类型所占的字节数。<br>char输出为1，double：8.<br><br><br>char x[0];<br>x是什么类型？<br>我在VS2005下调试，结果是错误&nbsp; cannot allocate an array of constant size 0&nbsp;。<br>
<img src ="http://www.cppblog.com/Leon916/aggbug/65277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2008-10-28 08:54 <a href="http://www.cppblog.com/Leon916/archive/2008/10/28/65277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sizeof 用法总结（转）</title><link>http://www.cppblog.com/Leon916/archive/2008/10/27/65250.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Mon, 27 Oct 2008 14:10:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2008/10/27/65250.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/65250.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2008/10/27/65250.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/65250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/65250.html</trackback:ping><description><![CDATA[sizeof()功能：计算数据空间的字节数<br>1.与strlen()比较<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;strlen()计算字符数组的字符数，以"\0"为结束判断。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而sizeof计算数据（包括数组、变量、类型、结构体等）所占内存空间，用字节数表示<br>2.指针与静态数组的sizeof操作<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：int *p; sizeof(p)=4;<br>&nbsp;&nbsp;&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)等于10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sizeof(b)等于7;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：数组做型参时，数组名称当作指针使用！！<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}<br>&nbsp;&nbsp;&nbsp;&nbsp;<br><span class=tpccontent1><font size=3><font face="Times New Roman"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">&nbsp; 经典问题：</span>&nbsp;</font></font></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><br><font size=3><font face="Times New Roman"><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double* (*a)[3][6];</span>&nbsp;<br><br></font></font><font size=3><font face="Times New Roman"><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;sizeof(a)&lt;&lt;endl; // 4</span>&nbsp;<br><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;sizeof(*a)&lt;&lt;endl; // 72</span>&nbsp;<br><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;sizeof(**a)&lt;&lt;endl; // 24</span>&nbsp;<br><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;sizeof(***a)&lt;&lt;endl; // 4</span>&nbsp;<br><span class=tpccontent1><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>cout&lt;&lt;sizeof(****a)&lt;&lt;endl; // 8</span>&nbsp;<br><br><span class=tpccontent1><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>a</span></font></font></span><font size=3><font face="Times New Roman"><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><br><span class=tpccontent1><font face="Times New Roman" size=3><span class=tpccontent1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></font></span></span><font size=3><font face="Times New Roman"><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><font size=3><font face="Times New Roman"><span class=tpccontent1><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">sizeof(*a)<br>&nbsp;&nbsp;&nbsp;&nbsp; =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</span></span></font></font><span class=tpccontent1><font size=3><font face="Times New Roman"><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana">。</span>&nbsp;<br></font></font></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><font face="Times New Roman" size=3>3.格式的写法<br>&nbsp;&nbsp;&nbsp;sizeof操作符，对变量或对象可以不加括号，但若是类型，须加括号<br>4</font><font face="Times New Roman" size=3>.使用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="Times New Roman" size=3>占用空间最大的成员（的类型）所占字节数的整倍数<br>&nbsp;&nbsp; (2)数据对齐原则----内存按结构成员的 先后顺序排列，当排到该成员变量时，其前面已摆放的空间大小必须是该成员类型大小的整倍数，如果不够则补齐，以此向后类推。。。。。<br>&nbsp;&nbsp; 注意：数组按照单个变量一个一个的摆放，而不是看成整体。如果成员中有自定义的类、结构体，也要注意数组问题。<br>例：[引用其他帖子的内容]<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><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><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">同样是两个</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">类型，但是因为对界问题，导致他们的大小不同。计算结构体大小可以采用元素摆放法，我举例子说明一下：首先，</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><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">对于</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><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">对于</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">的倍数。</span></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><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">这里有个陷阱，对于结构体中的结构体成员，不要认为它的对齐方式就是他的大小，看下面的例子：</span></span><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><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><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><span class=tpccontent1>&nbsp; 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">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><span lang=EN-US style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br><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">所以，在自己定义结构体的时候，如果空间紧张的话，最好考虑对齐因素来排列结构体里的元素。</span></span></font></span></span></span>
<img src ="http://www.cppblog.com/Leon916/aggbug/65250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2008-10-27 22:10 <a href="http://www.cppblog.com/Leon916/archive/2008/10/27/65250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网上面试题疑问</title><link>http://www.cppblog.com/Leon916/archive/2008/10/06/63320.html</link><dc:creator>Leon916</dc:creator><author>Leon916</author><pubDate>Mon, 06 Oct 2008 08:00:00 GMT</pubDate><guid>http://www.cppblog.com/Leon916/archive/2008/10/06/63320.html</guid><wfw:comment>http://www.cppblog.com/Leon916/comments/63320.html</wfw:comment><comments>http://www.cppblog.com/Leon916/archive/2008/10/06/63320.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/Leon916/comments/commentRss/63320.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Leon916/services/trackbacks/63320.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 快找工作了，从今天开始开始复习C++等知识了。现在遇到了几个奇怪的题目：<br>&nbsp;&nbsp; 1、
<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: #0000ff">class</span><span style="COLOR: #000000">&nbsp;CLS<br><img id=Codehighlighter1_10_98_Open_Image onclick="this.style.display='none'; Codehighlighter1_10_98_Open_Text.style.display='none'; Codehighlighter1_10_98_Closed_Image.style.display='inline'; Codehighlighter1_10_98_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_10_98_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_10_98_Closed_Text.style.display='none'; Codehighlighter1_10_98_Open_Image.style.display='inline'; Codehighlighter1_10_98_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_10_98_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_10_98_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;m_i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CLS(&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;)&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">:&nbsp;m_i(i)&nbsp;{}</span><span style="COLOR: #008000"><br><img id=Codehighlighter1_59_73_Open_Image onclick="this.style.display='none'; Codehighlighter1_59_73_Open_Text.style.display='none'; Codehighlighter1_59_73_Closed_Image.style.display='inline'; Codehighlighter1_59_73_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_59_73_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_59_73_Closed_Text.style.display='none'; Codehighlighter1_59_73_Open_Image.style.display='inline'; Codehighlighter1_59_73_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_59_73_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_59_73_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CLS()<br><img id=Codehighlighter1_83_96_Open_Image onclick="this.style.display='none'; Codehighlighter1_83_96_Open_Text.style.display='none'; Codehighlighter1_83_96_Closed_Image.style.display='inline'; Codehighlighter1_83_96_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_83_96_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_83_96_Closed_Text.style.display='none'; Codehighlighter1_83_96_Open_Image.style.display='inline'; Codehighlighter1_83_96_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_83_96_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_83_96_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CLS(</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_112_150_Open_Image onclick="this.style.display='none'; Codehighlighter1_112_150_Open_Text.style.display='none'; Codehighlighter1_112_150_Closed_Image.style.display='inline'; Codehighlighter1_112_150_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_112_150_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_112_150_Closed_Text.style.display='none'; Codehighlighter1_112_150_Open_Image.style.display='inline'; Codehighlighter1_112_150_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_112_150_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_112_150_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;CLS&nbsp;obj;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;obj.m_i&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
问输出是多少？<br>调试之后，发现在<br>CLS()<br>&nbsp;{<br>&nbsp;&nbsp;CLS(0);<br>&nbsp;}<br>中的this指针不同，所以这里可能和c#或者Java不同，当调用CLS（0）的时候，它会重新分配一块空间，并且初始化新对象的m_i=0.<br>后来在网上搜了一下，找打了这篇文章：<a href="http://blog.csdn.net/cnheying/archive/2007/05/16/1611698.aspx">http://blog.csdn.net/cnheying/archive/2007/05/16/1611698.aspx</a>&nbsp;和<a href="http://www.cnblogs.com/chio/archive/2007/10/20/931043.html">http://www.cnblogs.com/chio/archive/2007/10/20/931043.html</a>。不知道大家对这道题有什么想法，欢迎讨论！<br>2、
<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: #0000ff">float</span><span style="COLOR: #000000">&nbsp;a&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)a&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">cout&nbsp;&lt;&lt;&nbsp;*(int*)&amp;a&nbsp;&lt;&lt;&nbsp;endl;</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;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;boolalpha&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)a&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)a)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">float</span><span style="COLOR: #000000">&nbsp;b&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0.0f</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)b&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)b&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;boolalpha&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)b&nbsp;</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">)b)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
本来不存在我注释的那一行，考虑（int&amp;)a的时候，发现输出跟想想的不一样，后来发现和*(int*)&amp;a的值是相同的。所以我猜测(int&amp;)a可能首先取a的地址，然后转化成(int*)，再去a地址里面的内容，这时是按照int读取的。<br>3、
<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;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">x;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p)&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;y&nbsp;</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p)</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">:&nbsp;y)&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;x&nbsp;</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">&nbsp;endl;</span></div>
&nbsp;关于三元运算符和++的比较，++的优先级比三元运算符高。我是在VS2005下调试的，通过读汇编代码，发现((*p) ++&lt; y ? (*p)++: y)；首先对x+1，然后把值回写的内存中，用原来的之比较，比较晚之后，再从内存中读取出值，进行cout&lt;&lt;（*p）++&lt;&lt;endl;的操作。输出原值后再+1。结果x最终输出3。（这样如果死扣语言，我觉得自己会死人的）。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果以上哪里分析的不对，欢迎大家拍砖！！
<img src ="http://www.cppblog.com/Leon916/aggbug/63320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Leon916/" target="_blank">Leon916</a> 2008-10-06 16:00 <a href="http://www.cppblog.com/Leon916/archive/2008/10/06/63320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>