﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-刘加加在成长(C++语言学习中)-随笔分类-学习C++语言</title><link>http://www.cppblog.com/liujiajia/category/7258.html</link><description>学习、工作、生活，这是三个问题。</description><language>zh-cn</language><lastBuildDate>Wed, 23 Jul 2008 09:32:46 GMT</lastBuildDate><pubDate>Wed, 23 Jul 2008 09:32:46 GMT</pubDate><ttl>60</ttl><item><title>最简单的windows程序</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/23/56963.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Wed, 23 Jul 2008 09:01:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/23/56963.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56963.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/23/56963.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56963.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56963.html</trackback:ping><description><![CDATA[<p>1.打开vc++;<br>2.选择菜单栏file----new；<br>3.选项卡选择Projects；<br>4.模板选择 Win32 Application;<br>5.输入Project name；<br>6.Loction 选择路径；<br>7.点击OK继续；<br>8.选择默认的&#8220;An Empty project&#8221;；<br>9.点击finish完成创建工程；<br>10.向工程里面添加一个c++文件；（file--new--选项卡file--C++ source file--输入文件名--点击OK）<br>11.输入以下代码；</p>
<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: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;WIN32_LEAN_AND_MEAN</span><span style="COLOR: #000000"><br><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windows.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">windowsx.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;WINAPI&nbsp;WinMain(HINSTANCE&nbsp;hinstance,HINSTANCE&nbsp;hprevinstance,LPSTR&nbsp;lpcmdline,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;ncmdshow)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;MessageBox(NULL,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">Hello&nbsp;World!</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">first&nbsp;win</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,MB_OK</span><span style="COLOR: #000000">|</span><span style="COLOR: #000000">MB_ICONEXCLAMATION);<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>
<p>12.保存，按ctrl+F5编译并运行。<br>13.弹出一个对话框。<br><img height=113 alt="" src="http://www.cppblog.com/images/cppblog_com/liujiajia/alert.gif" width=144 border=0><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上就是号称世界上最简单的Windows程序！<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>
<img src ="http://www.cppblog.com/liujiajia/aggbug/56963.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-23 17:01 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/23/56963.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数返回值的特殊情况（返回引用、非引用、引用左值）</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/16/56244.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Tue, 15 Jul 2008 16:41:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/16/56244.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56244.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/16/56244.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56244.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56244.html</trackback:ping><description><![CDATA[<strong><span style="FONT-SIZE: 14pt">返回非引用</span><br></strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string make_plural(size_t i,const string &amp;word,const string &amp;ending)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (i==1)?word:word+ending;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上函数，当i等于1时，函数返回word形参的副本；当i不等于1时函数返回一个临时的string对象，这个临时对象是由字符串word和ending相加而成的。这两种情况下，return都在调用该函数的地方防复制了返回的string对象。<br><br><span style="FONT-SIZE: 14pt"><strong>返回引用</strong></span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const string &amp;shorterString(const string &amp;s1,const string &amp;s2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return s1.size()&lt;s2.size()?s1:s2;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;以上函数的返回值是引用类型。无论返回s1或是s2,调用函数和返回结果时，都没有复制这些string对象。<br><br><strong style="COLOR: red">千万不要返回局部对象的引用</strong><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const string &amp;mainip(const string &amp;s)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string ret=s;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ret;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当函数执行完毕，程序将释放分配给局部对象的存储空间。此时，对局部对象的引用就会指向不确定的内存。（我在dev c++里运行通过。。。。 但是vc6和vc2008不能编译通过）。同理，也不能返回局部对象的指针。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><br><span style="FONT-SIZE: 14pt"><strong>引用返回左值（比较奇妙）</strong></span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char &amp;get_val(string &amp;str,string::size_type ix)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return str[ix];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用语句调用:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; string s("123456");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get_val(s,0)='a';<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把函数应用于左值，还是第一次见到（真是孤陋寡闻）。<br><br>以下是上面几种情况的实例代码：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">liujiajia<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2008-7-16</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;make_plural(size_t,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">shorterString(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">mainip(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">get_val(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">::size_type);<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">make_plural(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dog</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">make_plural(</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">dog</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;string1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">1234</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;string2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">abc</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">shorterString(string1,string2)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">mainip(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">jiajia</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">123456</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;get_val(s,</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;getchar();<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></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回非引用&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;make_plural(size_t&nbsp;i,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">word,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">ending)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;(i</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">word:word</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">ending;<br>}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">返回引用&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">shorterString(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s1,</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s2)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;s1.size()</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">s2.size()</span><span style="COLOR: #000000">?</span><span style="COLOR: #000000">s1:s2;<br>}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">禁止返回局部对象的引用（我的dev&nbsp;c++&nbsp;没有报错，比较可怕）&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">mainip(</span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">s)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;ret</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">s;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;ret;<br>}<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">引用返回左值（第一次听说）&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">get_val(</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">str,</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">::size_type&nbsp;ix)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;str[ix];<br>}</span></div>
<br>
<img src ="http://www.cppblog.com/liujiajia/aggbug/56244.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-16 00:41 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/16/56244.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数组的形参</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/15/56143.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Mon, 14 Jul 2008 16:05:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/15/56143.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56143.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/15/56143.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56143.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数组有两个特殊的性质，影响我们定义和使用作用在数组上的函数：一是不能复制数组。二是使用数组名字时，数组会自动转换为指向其第一个元素的指针。因为数组不能复制，所以无法编写使用数组类型形参的函数。因为数组会被初始化为指针，所以处理数组的函数通常通过操作指向数组中的元素的指针来处理数组。<br><br>示例：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//形式1<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void printValues(const int ia[10])&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//虽然形参指定了数组的大小，但编译时不会检查实参数组大小，因为编译器只检查形参是否是指针，并且指针类型和数组元素的类型是否匹配。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(size_t i=0;i!=10;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;ia[i]&lt;&lt;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//形式2<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void printValues2(const int ia[],int size)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(size_t i=0;i!=size;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;ia[i]&lt;&lt;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int main(void)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int i[10]={1,2,3,4,5,6,7,8,9,0};<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printValues(i);&nbsp;&nbsp;&nbsp;//i作为printValues的实参，在这里为数组i的首地址，或者说他转换为成一个指针<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printValues2(i,10);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数组形参可以定义为引用或非引用类型。大部分情况下，数组以普通的非引用类型传递,此时数组会悄悄的转换为指针。一般来说，非引用类型的形参会初始化为其相应实参的副本。但是在传递数组时，实参是指向数组第一个元素的指针，形参复制的是这个指针的值，而不是数组元素本身。函数操作的也是指针的副本，因此不会修改实参指针的值。然而，函数可通过该指针修改它所指向的数组元素的值。<br><br>以上代码可以使用指针表示，效果等同：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void printValues3(const int *ia,int size)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(size_t i=0;i!=size;i++,ia++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;*ia&lt;&lt;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br><br>示例2（通过引用传递数组）：<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void printValues4(int (&amp;arr)[10])&nbsp;&nbsp;&nbsp;&nbsp;//这种情况下，数组大小成为形参和实参的一部分。编译器会检查数组大小是否匹配。&nbsp;int (&amp;arr)[10] 中的小括号是必须的。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(size_t i=0;i!=10;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout&lt;&lt;arr[i]&lt;&lt;endl;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int main(void)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printValues4(i);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和其他类型一样，数组形参可声明为数组的引用。如果形参是数组的引用，编译器不会将数组实参转化为指针，而是传递数组的引用本身。
<img src ="http://www.cppblog.com/liujiajia/aggbug/56143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-15 00:05 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/15/56143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>传递指向指针的引用</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/14/56135.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Mon, 14 Jul 2008 14:19:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/14/56135.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56135.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/14/56135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56135.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56135.html</trackback:ping><description><![CDATA[&nbsp;代码示例：<br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">liujiajia<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2008-7-14&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ptrswap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">20</span><span style="COLOR: #000000">;<br>&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">pi</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">i;<br>&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">pj</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">j;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用ptr()之前:pi=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">pi</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,*pi=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">pi</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;pj=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">pj</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,*pj=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">pj</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;ptrswap(pi,pj);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用ptr()之后:pi=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">pi</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,*pi=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">pi</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;pj=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">pj</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,*pj=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;*</span><span style="COLOR: #000000">pj</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;getchar();<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></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;ptrswap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*&amp;</span><span style="COLOR: #000000">v1,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*&amp;</span><span style="COLOR: #000000">v2)<br>{<br>&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">temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v1;<br>&nbsp;&nbsp;&nbsp;&nbsp;v1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">v2;<br>&nbsp;&nbsp;&nbsp;&nbsp;v2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br>}</span></div>
<br>在调用ptrswap之前，pi指向i,pj指向j。在调用ptrswap之后，pi指向j,而pj指向了i。
<img src ="http://www.cppblog.com/liujiajia/aggbug/56135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-14 22:19 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/14/56135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用引用形参的优点和注意事项</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/14/56131.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Mon, 14 Jul 2008 13:48:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/14/56131.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56131.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/14/56131.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56131.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56131.html</trackback:ping><description><![CDATA[<p><span style="FONT-SIZE: 14pt"><strong>使用引用形参的优点：</strong></span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在向函数传递大对象时，需要使用引用形参。虽然赋值实参对于内置数据类型的对象或者规模较小的类类型来说没有什么问题，但是对于大部分的类类型或者大型数组，它的效率就比较低了。另外，某些类类型是无法复制的。使用引用形参，函数可以直接访问实参对象，而无须复制它。<br><br>示例：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bool isShorter(const string &amp;str1,const string &amp;str2)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return str1.size()&lt;str2.size();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于string对象可能非常的长，我们希望避免复制操作。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>如果使用引用形参的唯一目的是避免复制形参，则应将形参定义为const引用。<br></strong><br><span style="FONT-SIZE: 14pt"><strong>使用引用形参应该注意的：</strong></span><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int incr(int &amp;val)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return ++val;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void main(void)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; short v1=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const int v2=10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int v3=20;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr(v1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误，v1不是int<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr(v2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误，v2是const<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr(v3);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//正确<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;incr(10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//错误&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;所以，调用非const类型的引用形参，实参必须不是const类型的，而且实参的类型和形参的类型应当一致。</p>
<img src ="http://www.cppblog.com/liujiajia/aggbug/56131.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-14 21:48 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/14/56131.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用引用形参返回额外的信息</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/14/56085.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Mon, 14 Jul 2008 04:12:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/14/56085.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56085.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/14/56085.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56085.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56085.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个函数只能有一个返回值，但如果我想让他返回更多的信息怎么办呢？这种情况可以使用引用形参。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;因为引用形参在函数调用后是可以修改实参值的，所以就相当与函数的返回值。<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下面的代码演示了一个带有一个返回值，并通过引用形参向主调函数返回信息的函数。这个函数的功能是找出在容器中某一个数值出现的次数，并返回该数值第一次出现的迭代器。<br><br><br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">liujiajia<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2008-7-14</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">vector</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br>vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;find_val(vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator,vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">,vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::size_type&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;some;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;val;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用push_back()输入容器中的值&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">val)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;some.push_back(val);<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">存储值出现的次数&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::size_type&nbsp;ccurs;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">调用函数&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;it</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">find_val(some.begin(),some.end(),</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,ccurs);<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">ccurs</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>}<br><br>vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;find_val(<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;beg,<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;end,<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;value,<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::size_type&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">occurs)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;vector</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">::const_iterator&nbsp;res_iter</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">end;<br>&nbsp;&nbsp;&nbsp;&nbsp;occurs</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">(;beg</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">end;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">beg)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&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">beg</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">value)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这个if语句的作用是让res_iter等于值第一次出现的位置&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(res_iter</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">end)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;res_iter</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">beg;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;occurs</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;res_iter;<br>}</span></div>
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<img src ="http://www.cppblog.com/liujiajia/aggbug/56085.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-14 12:12 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/14/56085.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>函数的形参（非引用形参、指针形参、引用形参）</title><link>http://www.cppblog.com/liujiajia/archive/2008/07/14/56054.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sun, 13 Jul 2008 16:30:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/07/14/56054.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/56054.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/07/14/56054.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/56054.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/56054.html</trackback:ping><description><![CDATA[一、非引用形参<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void add1(int v1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v1+=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是最普通的形参方式，当函数被调用时，实参的副本初始化形参，函数并没有访问调用所传递的实参，因此v1+=1不会修改实参的值。对v1的操作只是修改了实参的一个副本。<br><br>二、指针形参<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void add2(int *p)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*p+=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p+=1;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;使用指针做为函数的形参，同样指针的值（指针的地址）不会因为p+=1而受到影响，但是指针指向的地址的值（*p）将会改变。所以要想修改实参的值，可以使用这种方法。但是还有一种更安全更自然的方法-引用形参<br><br>三、引用形参<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;void swap(int &amp;a,int &amp;b)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int temp=a;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a=b;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b=temp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;引用形参直接关联到其所绑定的对象，而非这些对象的副本。 所以这种方法可以修改实参的值，而且更加直观。<br><br>三种方法实例代码：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008000">//</span><span style="COLOR: #008000">liujiajia<br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">2008-7-14&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;swap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">);<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;n</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用add1()之前n=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;add1(n);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用add1()之后n=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&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</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">n;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用add2()之前n=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,p=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;add2(p);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用add2()之后n=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">n</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,p=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用swap()之前a=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,b=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;swap(a,b);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">调用swap()之后a=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">a</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,b=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">b</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;getchar();<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">非引用形参&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add1(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;v1)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;v1</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">指针形参</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add2(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">p</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>&nbsp;&nbsp;&nbsp;&nbsp;p</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br>}&nbsp;<br><br></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">引用形参</span><span style="COLOR: #008000"><br></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;swap(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">a,</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">b)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;temp</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">a;<br>&nbsp;&nbsp;&nbsp;&nbsp;a</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">b;<br>&nbsp;&nbsp;&nbsp;&nbsp;b</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">temp;<br>}<br></span></div>
<img src ="http://www.cppblog.com/liujiajia/aggbug/56054.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-07-14 00:30 <a href="http://www.cppblog.com/liujiajia/archive/2008/07/14/56054.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>const和指针（指向const对象的指针、const指针）</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/21/54166.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Fri, 20 Jun 2008 16:13:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/21/54166.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/54166.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/21/54166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/54166.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/54166.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 14pt"><strong>1.指向const对象的指针</strong></span><br><br>const int *p;<br>这个p是一个指向int类型const对象的指针，const限定了指针p所指向的类型，而并非p本身。也就是说p本身并不是const。在定义时不需要对它进行初始化，还可以给p重新赋值，使其指向另一个const对象。但不能通过p修改所指向对象的值。<br>示例1：int a=0; p=&amp;a;&nbsp; 可以。<br>示例2：*p=20;&nbsp; 不可以。<br>结论：这种指向const对象的指针只是限制不能修改p指向对象的数值，而不是限制p指向什么对象。<br><br>把一个const对象的地址赋给一个不是指向const对象的指针也是不行的。<br>示例3：const int b=10;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int *p2=&amp;b;&nbsp;&nbsp; //error<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;const int *p3=&amp;b; //ok<br>结论：因为变量b有const修饰，不能被修改。但指针p2是一个普通的指针，可以修改指向对象的值，两种声明矛盾，所以不合法。而指向const对象的指针不允许修改指针指向对象的数值，所以这种方式合法。<br><br><span style="FONT-SIZE: 14pt"><strong>2.const指针</strong></span><br><br>int c=20;<br>int *const p4=&amp;c;<br><br>指针p4称为const指针。它和指向const对象的指针恰好相反，它不能够修改所指向对象，但却能够修改指向对象的数值。另外，这种指针在声明时必须初始化。<br><br><span style="FONT-SIZE: 14pt"><strong>3.指向const对象的const指针</strong></span><br><br>const int&nbsp;d=30;<br>const int *const dp=&amp;d;<br><br>指针dp既不能修改指向的对象，也不能修改只想对象的值。
<img src ="http://www.cppblog.com/liujiajia/aggbug/54166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-21 00:13 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/21/54166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标准库 bitset 类型</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/06/52400.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Fri, 06 Jun 2008 15:04:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/06/52400.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/52400.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/06/52400.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/52400.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/52400.html</trackback:ping><description><![CDATA[有些程序要处理二进制有序集，每个位可能包含0值或者1值。位是保存一组项或条件yes/no信息的简洁方法。标准库提供的bitset类简化了位集的处理。使用bitset 类型，必须包含头文件：#include&lt;bitset&gt;<br><br>bitset对象的定义和初始化<br><br>bitset&lt;n&gt; b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b有n位，每位都是0；<br>bitset&lt;n&gt; b(u);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b是unsigned long型u的副本；<br>bitset&lt;n&gt; b(s);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b是string对象s中含有的位串的副本；<br>bitset&lt;n&gt; b(s,pos,n);&nbsp;&nbsp;&nbsp;b是s中从位置pos开始的n个位的副本；<br><br>示例：<br>&nbsp;&nbsp;&nbsp;&nbsp;bitset&lt;16&gt; bitvec1(0xffff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bitvec1的0-15位都是1<br>&nbsp;&nbsp;&nbsp; bitset&lt;32&gt; bitvec2(0xffff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bitvec2的0-15为是1，16-31是0<br>&nbsp;&nbsp;&nbsp; bitset&lt;128&gt; bitvec3(0xffff);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bitvec3的0-15位是1，16-127都是0<br>&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp; string str("1100");<br>&nbsp;&nbsp;&nbsp; bitset&lt;32&gt; bitvec4(str);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//bitvec4的第2、第3位是1，其余都是0。因为string对象和bitset对象之间是反向转化的：string对象的最右边字符（即下标最大的那个字符）用来初始化bitset对象的低价位（即小标为0的位）<br><br>bitset对象的操作：<br><br>b.any()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b中是否存在置为1的二进制位？<br>b.none()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b中不存在置为1的二进制位吗？<br>b.count()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b中值为1的二进制位的个数<br>b.size()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b中二进制位的个数<br>b[pos]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 访问b中在pos处的二进制位<br>b.test(pos)&nbsp;&nbsp;&nbsp; b中在pos处的二进制位是否为1？<br>b.set()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把b中所有的二进制位都置为1<br>b.set(pos)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把b中在pos处的二进制位置为1<br>b.reset()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把b中所有的二进制位都置为0<br>b.reset(pos)&nbsp;&nbsp;&nbsp;&nbsp;把b中在pos处的二进制位置为0<br>b.flip()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把b中所有二进制位逐位取反<br>b.flip(pos)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;把b中在pos处的二进制位取反<br>b.to_ulong()&nbsp;&nbsp;&nbsp;用b中同样的二进制位返回一个unsigned long值<br>os&lt;&lt;b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;吧b中的位集输出到os流<br>
<img src ="http://www.cppblog.com/liujiajia/aggbug/52400.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-06 23:04 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/06/52400.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>迭代器 iterator</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/06/52399.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Fri, 06 Jun 2008 14:32:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/06/52399.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/52399.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/06/52399.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/52399.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/52399.html</trackback:ping><description><![CDATA[<strong style="FONT-SIZE: 14pt">迭代器</strong>(iterator)是一中检查容器内元素并遍历元素的数据类型。<br><br>每种容器类型都定义了自己的迭代器类型，如vector:<br>vector&lt;int&gt;::iterator iter;这条语句定义了一个名为iter的变量，它的数据类型是由vector&lt;int&gt;定义的iterator类型。<br><br><strong>使用迭代器读取vector中的每一个元素：<br></strong>&nbsp;&nbsp;&nbsp;vector&lt;int&gt; ivec(10,1);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; for(vector&lt;int&gt;::iterator iter=ivec.begin();iter!=ivec.end();++iter)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *iter=2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使用 * 访问迭代器所指向的元素<br>&nbsp;&nbsp;&nbsp; }<br><br><br><strong>const_iterator:</strong><br>只能读取容器中的元素，而不能修改。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(vector&lt;int&gt;::const_iterator citer=ivec.begin();citer!=ivec.end();citer++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;*citer;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //*citer=3;&nbsp;&nbsp; error<br>&nbsp;&nbsp;&nbsp; }<br><br><strong>vector&lt;int&gt;::const_iterator 和 const vector&lt;int&gt;::iterator的区别<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;const vector&lt;int&gt;::iterator newiter=ivec.begin();<br>&nbsp;&nbsp;&nbsp; *newiter=11;&nbsp;&nbsp;&nbsp;//可以修改指向容器的元素<br>&nbsp;&nbsp;&nbsp; //newiter++;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//迭代器本身不能被修改 <br><br><strong>iterator的算术操作：<br></strong>iterator除了进行++,--操作，可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.<br>&nbsp;&nbsp;&nbsp;&nbsp;const vector&lt;int&gt;::iterator newiter=ivec.begin();<br>&nbsp;&nbsp;&nbsp;&nbsp;vector&lt;int&gt;::iterator newiter2=ivec.end();<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"\n"&lt;&lt;<strong>newiter2-newiter</strong>;
<img src ="http://www.cppblog.com/liujiajia/aggbug/52399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-06 22:32 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/06/52399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>认识标准库vector类型</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/02/51928.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Mon, 02 Jun 2008 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/02/51928.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51928.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/02/51928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51928.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51928.html</trackback:ping><description><![CDATA[vector是同一种类型的对象的集合，每个对象都有一个对应的整数索引值。和string对象一样，标准库将负责管理与存储元素相关的内存。我们把vector称之为容器。使用vector类型必须包含 include&lt;vector&gt;。<br>vector 是一个类模板(class template)。<br><br><strong style="FONT-SIZE: 14pt">vector的定义和初始化：</strong><br>&nbsp;&nbsp;&nbsp; vector&lt;string&gt; text;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存类型为string的对象，默认构造函数text为空<br>&nbsp;&nbsp;&nbsp; vector&lt;string&gt; text2(10);&nbsp;&nbsp;&nbsp;//保存类型为string的对象，包含10个空字符串<br>&nbsp;&nbsp;&nbsp; vector&lt;int&gt; ive(10,9);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//保存int的对象，保存10个值为9的整形变量<br>&nbsp;&nbsp;&nbsp; vector&lt;int&gt; ive2(ive);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//使用ive初始化ive2<br><br><span style="FONT-SIZE: 14pt"><strong>向vector添加元素：<br></strong></span>&nbsp;&nbsp;&nbsp;while(cin&gt;&gt;word)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; text.<strong>push_back</strong>(word);&nbsp;&nbsp;//使用push_back可以向vector的后面插入新的元素。<br>&nbsp;&nbsp;&nbsp; } <br>注意：*vector对象（以及其他标准库容器对象）的重要属性就在于可以在运行时高效的添加元素，因为vector增长效率高，在元素值已知的情况下，最好是动态的添加元素。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*虽然可以对给定元素个数的vector对象预先分配内存，但更有效的方法是初始化一个空vector对象，然后再动态的增加元素。<br><br><strong style="FONT-SIZE: 14pt">vector的下标操作：</strong><br>for(vector&lt;string&gt;::size_type ix=0;ix!=text.<strong>size</strong>();++ix)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;text<strong>[ix]</strong>&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>*使用vector&lt;string&gt;::size_type类型可以接收vector&lt;string&gt;类型的大小。<br>*不在for循环之前取得vector的大小，而在for循环中计算text.size()，是因为vector是可以增长的，所以它的元素数目是不确定的。<br>*和string对象一样，vector可以通过下标直接访问元素。<br><br><strong style="FONT-SIZE: 14pt">附表：vector操作</strong><br>
<table style="WIDTH: 460px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>v.empty()</td>
            <td>如果v为空，则返回true</td>
        </tr>
        <tr>
            <td>v.size()</td>
            <td>返回v中元素的个数</td>
        </tr>
        <tr>
            <td>v.push_back(t)</td>
            <td>需按不过v的末尾增加一个值为t的元素</td>
        </tr>
        <tr>
            <td>v[n]</td>
            <td>返回v中位置为n的元素</td>
        </tr>
        <tr>
            <td>v1=v2</td>
            <td>吧v1的值与替换为v2中元素的副本</td>
        </tr>
        <tr>
            <td>v1==v2</td>
            <td>如果v1与v2相等，则返回true</td>
        </tr>
        <tr>
            <td>!=,&lt;,&lt;=,&gt;,&gt;=</td>
            <td>保持这些操作符惯有的含义</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/liujiajia/aggbug/51928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-02 23:48 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/02/51928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++字符处理 cctype</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/01/51853.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sun, 01 Jun 2008 15:45:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/01/51853.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51853.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/01/51853.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51853.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51853.html</trackback:ping><description><![CDATA[cctype头文件中定义的函数：<br>
<table style="WIDTH: 490px; BORDER-COLLAPSE: collapse" cellSpacing=0 cellPadding=3 border=1>
    <tbody>
        <tr>
            <td>isalnum(c)</td>
            <td>如果c是字母或数字，则为true</td>
        </tr>
        <tr>
            <td>isalpah(c)</td>
            <td>如果c是字母，则为true</td>
        </tr>
        <tr>
            <td>iscntrl(c)</td>
            <td>如果c是控制字符，则为true</td>
        </tr>
        <tr>
            <td>isdigit(c)</td>
            <td>如果c是数字，则为true</td>
        </tr>
        <tr>
            <td>isgraph(c)</td>
            <td>如果c不是空格，则为true</td>
        </tr>
        <tr>
            <td>islower(c)</td>
            <td>如果c是小写字母，则为true</td>
        </tr>
        <tr>
            <td>isprint(c)</td>
            <td>如果c是可打印的字符，则为true</td>
        </tr>
        <tr>
            <td>ispunct(c)</td>
            <td>如果c是标点符号，则为true</td>
        </tr>
        <tr>
            <td>isspace(c)</td>
            <td>如果c是空白字符，则为true</td>
        </tr>
        <tr>
            <td>isupper(c)</td>
            <td>如果c是大些字母，则为true</td>
        </tr>
        <tr>
            <td>isxdigit(c)</td>
            <td>如果c是十六进制数，则为true</td>
        </tr>
        <tr>
            <td>tolower(c)</td>
            <td>如果c是大写字母，则返回小写字母形式，否则返回c。</td>
        </tr>
        <tr>
            <td>toupper(c)</td>
            <td>如果c是小写字母，则返回大些字母形式，否则返回c。</td>
        </tr>
    </tbody>
</table>
<img src ="http://www.cppblog.com/liujiajia/aggbug/51853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-01 23:45 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/01/51853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>string对象的操作 size() empty() 关系运算 赋值 下标访问</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/01/51849.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sun, 01 Jun 2008 15:22:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/01/51849.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51849.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/01/51849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51849.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51849.html</trackback:ping><description><![CDATA[<strong><em>string对象的操作：<br></em></strong><br><strong style="FONT-SIZE: 18pt">size():</strong>用来获取字符串的长度。<br>输出字符串s的长度：<br>&nbsp;&nbsp;&nbsp; string s("hello world!\n");<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"the size of '"&lt;&lt;s&lt;&lt;"' is"&lt;&lt;s.<strong>size</strong>()&lt;&lt;endl;<br><br>判断字符串是否为空的两种方式：<br>&nbsp;&nbsp;&nbsp; if(s.<strong>size</strong>()==0)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s.size==0"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; if(s.<strong>empty</strong>())<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout&lt;&lt;"s.empty()"&lt;&lt;endl;<br>&nbsp;&nbsp;&nbsp; }<br><br><strong style="FONT-SIZE: 14pt">获得字符串长度：</strong><br>&nbsp;&nbsp;&nbsp; int num=s.size();&nbsp;&nbsp;&nbsp; 使用整形接收字符串长度可能会有问题，因为int变量的表示范围太小，有时不能存储string对象的长度。使用string::size_type类型可以满足要求，这种类型是unsigned的，这比signed类型要大一倍。事实上size()函数返回的也是 size_type 类型。<br><br><span style="FONT-SIZE: 14pt"><strong>关系运算：<br></strong></span>可以使用：s1==s2；s1&gt;s2；s1&lt;s2，来比较两个字符串。<br><br><strong style="FONT-SIZE: 14pt">赋值运算：</strong><br>&nbsp;&nbsp;&nbsp; string snew="empty";<br>&nbsp;&nbsp;&nbsp; snew=s1;<br>上面代码首先初始化一个snew字符串，第二句将snew占用的内存释放掉，然后给snew足够存放s1副本的内存空间，最后把s1中所有的字符复制到新分配的内存空间。<br><br><span style="FONT-SIZE: 14pt"><strong>字符串连接：</strong></span><br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s1+"."&lt;&lt;endl;&nbsp;&nbsp;&nbsp; OK<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"1"+s1&lt;&lt;endl;&nbsp;&nbsp; OK<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s1+s2&lt;&lt;endl;&nbsp;&nbsp;&nbsp; OK<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;s1+s2+"."&lt;&lt;endl; OK<br>&nbsp;&nbsp;&nbsp; //cout&lt;&lt;"hello"+"jiajia"&lt;&lt;endl;&nbsp; ERROR<br>当进行string对象和字符串字面值混合连接操作时，+操作符的左右操作数必须至少有一个是string类型的。<br><br><strong style="FONT-SIZE: 14pt">通过下标访问string对象：</strong><br>&nbsp;&nbsp;&nbsp; string对象下标从0开始。<br>&nbsp;&nbsp;&nbsp; for(string::size_type ix=0;ix&lt;s1.size();ix++)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s1[ix]+=ix;<br>&nbsp;&nbsp;&nbsp; }
<img src ="http://www.cppblog.com/liujiajia/aggbug/51849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-01 23:22 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/01/51849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串的读取 cin 和 getline()</title><link>http://www.cppblog.com/liujiajia/archive/2008/06/01/51716.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sat, 31 May 2008 16:02:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/06/01/51716.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51716.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/06/01/51716.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51716.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51716.html</trackback:ping><description><![CDATA[<span style="FONT-SIZE: 18pt"><strong>cin</strong></span><br>&nbsp;&nbsp;&nbsp; string s;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"Enter some words...";<br>&nbsp;&nbsp;&nbsp; <strong>cin</strong>&gt;&gt;s;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"You write:"&lt;&lt;s&lt;&lt;endl;<br>*读取并忽略开头所有的空白字符（空格、换行符、制表符）。<br>*读取字符直至遇到空白字符，读取终止。<br><br><span style="FONT-SIZE: 18pt"><strong>getline()</strong></span><br>&nbsp;&nbsp;&nbsp; string line;<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"Enter a line...";<br>&nbsp;&nbsp;&nbsp; getline(cin,line);<br>&nbsp;&nbsp;&nbsp; cout&lt;&lt;"You write:"&lt;&lt;line&lt;&lt;endl;<br>*这个函数接收两个参数，第一个是输入流对象，第二个是string对象。<br>*getline不忽略行开头的换行符，只要getline()遇到换行符，哪怕是第一个字符，getline也将停止读取字符并返回。<br>*能够读取除换行之外的空白字符。<br><br>
<img src ="http://www.cppblog.com/liujiajia/aggbug/51716.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-06-01 00:02 <a href="http://www.cppblog.com/liujiajia/archive/2008/06/01/51716.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++初始化字符串的方式</title><link>http://www.cppblog.com/liujiajia/archive/2008/05/31/51714.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sat, 31 May 2008 15:48:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/05/31/51714.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51714.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/05/31/51714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51714.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51714.html</trackback:ping><description><![CDATA[C++初始化字符串的方式很灵活：<br>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化为空字符串&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s2(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hello</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化为一个字符串字面副本&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s3(s2);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">将s3初始化为一个s2的副本&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s4</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">hi&nbsp;jiajia</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">初始化为一个字符串字面副本&nbsp;</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s5(</span><span style="COLOR: #000000">15</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">A</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">);<br>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s1</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s2</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s3</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s4</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s5</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<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>注意：由于历史原因以及为了与C语言兼容，字符串字面值与标准库string类型不是同一种类型。
<img src ="http://www.cppblog.com/liujiajia/aggbug/51714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-05-31 23:48 <a href="http://www.cppblog.com/liujiajia/archive/2008/05/31/51714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>命名空间的using声明</title><link>http://www.cppblog.com/liujiajia/archive/2008/05/31/51713.html</link><dc:creator>刘加加</dc:creator><author>刘加加</author><pubDate>Sat, 31 May 2008 15:36:00 GMT</pubDate><guid>http://www.cppblog.com/liujiajia/archive/2008/05/31/51713.html</guid><wfw:comment>http://www.cppblog.com/liujiajia/comments/51713.html</wfw:comment><comments>http://www.cppblog.com/liujiajia/archive/2008/05/31/51713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/liujiajia/comments/commentRss/51713.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/liujiajia/services/trackbacks/51713.html</trackback:ping><description><![CDATA[std::cout&lt;&lt;s&lt;&lt;endl;<br>&nbsp;: : 操作符是作用域解析符。它的含义是右操作数的名字可以在左操作数的作用域中找到。std::cout 的意思是说所需名字cin是在命名空间std中定义的。这种符号引用标准库名字的方式是非常麻烦的。<br>&nbsp;&nbsp;&nbsp;&nbsp; c++提供了一种简单的方式来使用命名空间成员，using声明。这是一种最安全的机制。<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: #000000">#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::cin;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::endl;<br></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;std::</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;s;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确。string使用了using声明</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">s;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确。cin使用了using声明</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">错误。cout没有使用using声明</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;std::cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">s</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">正确。指定了命名空间</span><span style="COLOR: #008000"><br></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;system(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">pause</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);&nbsp;&nbsp;&nbsp;&nbsp;<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><em><strong>命名空间扩展：</strong></em><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在标准C++以前，都是用#include&lt;iostream.h&gt;这样的写法的，因为要包含进来的头文件名就是iostream.h。标准C++引入了名字空间的概念，并把iostream等标准库中的东东封装到了std名字空间中，同时为了不与原来的头文件混淆，规定标准C++使用一套新的头文件，这套头文件的文件名后不加.h扩展名，如iostream、string等等，并且把原来C标准库的头文件也重新命名，如原来的string.h就改成cstring(就是把.h去掉，前面加上字母c)，所以头文件包含的写法也就变成了#include &lt;iostream&gt;。 <br>并不是写了#include&lt;iostream&gt;就必须用using namespace std;我们通常这样的写的原因是为了一下子把std名字空间的东东全部暴露到全局域中（就像是直接包含了iostream.h这种没有名字空间的头文件一样），使标准C++库用起来与传统的iostream.h一样方便。如果不用using namespace std;使用标准库时就得时时带上名字空间的全名，如std::cout &lt;&lt; "hello" &lt;&lt; std::endl; <br>&nbsp;&nbsp;&nbsp;&nbsp; #include "iostream"与#include&lt;iostream&gt;的区别：前者先在当前目录找iostream文件，找不到再去系统头文件路径找，后者反之。因此，做为一个良好的习惯，在包含系统头文件时尽量用&lt;&gt;，而在包含自己的工程中的头文件时用""。
<img src ="http://www.cppblog.com/liujiajia/aggbug/51713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/liujiajia/" target="_blank">刘加加</a> 2008-05-31 23:36 <a href="http://www.cppblog.com/liujiajia/archive/2008/05/31/51713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>