﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-朗朗空间-随笔分类-C语言学习笔记</title><link>http://www.cppblog.com/k71983/category/6946.html</link><description>我知道并不是 
所有鸟儿都飞翔 </description><language>zh-cn</language><lastBuildDate>Sun, 25 May 2008 14:57:29 GMT</lastBuildDate><pubDate>Sun, 25 May 2008 14:57:29 GMT</pubDate><ttl>60</ttl><item><title>书上的练习-随机数-龟兔赛跑</title><link>http://www.cppblog.com/k71983/archive/2008/05/25/51026.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Sun, 25 May 2008 05:56:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/25/51026.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/51026.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/25/51026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/51026.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/51026.html</trackback:ping><description><![CDATA[<p>书上的一个练习！<br></p>
<div class=entry>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">// date 2008.5.25</span><span style="COLOR: gray"><br></span><span style="COLOR: #ffa500">// author fanghua.nie</span><span style="COLOR: gray"><br></span><span style="COLOR: #ffa500">// just do a exercise in the C How To Program </span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">windows.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdlib.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro> </span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">time.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">1</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray">&nbsp; </span><span style="COLOR: maroon">70</span><span style="COLOR: gray">&nbsp; </span><span style="COLOR: #ffa500">// the distances of the race</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">TORTOISE</span><span style="COLOR: gray"> '</span><span style="COLOR: blue">T</span><span style="COLOR: gray">'&nbsp; &nbsp; </span><span style="COLOR: #ffa500">// the symbol that is printed&nbsp; in the screen as a tortoise</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">RABBIT</span><span style="COLOR: gray"> '</span><span style="COLOR: blue">R</span><span style="COLOR: gray">'&nbsp; &nbsp; &nbsp; </span><span style="COLOR: #ffa500">// the symbol that is printed in the screen as a rabbit</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">ROAD</span><span style="COLOR: gray"> '.'&nbsp; &nbsp; &nbsp; &nbsp; </span><span style="COLOR: #ffa500">// the symbol that is printed in the screen as a mile road.</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">COMPLETE_ROAD</span><span style="COLOR: gray"> '+'</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span style="COLOR: #ffa500">// define the console color</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIGHT_GREEN</span><span style="COLOR: gray"> </span><span style="COLOR: blue">FOREGROUND_GREEN</span><span style="COLOR: gray"> | </span><span style="COLOR: blue">FOREGROUND_INTENSITY</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIGHT_YELLOW</span><span style="COLOR: gray"> </span><span style="COLOR: blue">FOREGROUND_GREEN</span><span style="COLOR: gray"> | </span><span style="COLOR: blue">FOREGROUND_RED</span><span style="COLOR: gray"> | </span><span style="COLOR: blue">FOREGROUND_GREEN</span><span style="COLOR: gray"> | </span><span style="COLOR: blue">FOREGROUND_INTENSITY</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIGHT_RED</span><span style="COLOR: gray"> </span><span style="COLOR: blue">FOREGROUND_RED</span><span style="COLOR: gray"> | </span><span style="COLOR: blue">FOREGROUND_INTENSITY</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span style="COLOR: #ffa500">// define BOOL datatype</span><span style="COLOR: gray"><br></span><span class=hl-types>typedef</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">BOOL</span><span style="COLOR: gray">;<br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">&nbsp; &nbsp;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span class=hl-prepro>FALSE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;<br>&nbsp;<br></span><span style="COLOR: #ffa500">//get the speed of the tortoise or the rabbit</span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">GetTortoiseSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">speed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">GetRabbitSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">speed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br></span><span style="COLOR: #ffa500">//output the result in console interface</span><span style="COLOR: gray"><br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">PrintRaceResult</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">// save the percent as a integer that less 10</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="COLOR: #ffa500">// 1&nbsp; 10%,&nbsp; &nbsp;2 20%, 9 90%, 10 100% etc.</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">speed</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">// save the speed of the rabbit or the tortoise </span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">srand</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">time</span><span style="COLOR: olive">(</span><span class=hl-prepro>NULL</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">&nbsp; &nbsp; &nbsp;The game began:</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: #ffa500">//show the tortoise and the rabbit </span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">PrintRaceResult</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray">, </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">//compute next speed of the tortoise</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">rand</span><span style="COLOR: olive">()</span><span style="COLOR: gray">%</span><span style="COLOR: maroon">10</span><span style="COLOR: gray"> + </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> !</span><span style="COLOR: blue">GetTortoiseSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">speed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"> </span><span style="COLOR: #ffa500">//get the speed of the tortoise</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Error!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">exit</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">ERROR</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">// move the tortoise to next position</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> + </span><span style="COLOR: blue">speed</span><span style="COLOR: gray">; <br>&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">0</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> &gt; </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">//compute next rate of rabbit speed</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">rand</span><span style="COLOR: olive">()</span><span style="COLOR: gray">%</span><span style="COLOR: maroon">10</span><span style="COLOR: gray"> + </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">//get the percent</span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> !</span><span style="COLOR: blue">GetRabbitSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"> </span><span style="COLOR: #ffa500">//get the speed of rabbit</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Error!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">exit</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">ERROR</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">//move the rabbit</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> + </span><span style="COLOR: blue">speed</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">//check the position whether is right or not, then correct it.</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">0</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> &gt; </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #ffa500">//show the tortoise and the rabbit </span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">PrintRaceResult</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray">, </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: #ffa500">//print the race result</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> &gt; </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Rabbit Wins!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">It's a tie</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Tortoise Wins!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span style="COLOR: blue">BOOL</span><span style="COLOR: gray"> </span><span style="COLOR: blue">GetTortoiseSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">speed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">1</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">5</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">6</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">7</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = -</span><span style="COLOR: maroon">6</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">8</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">10</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>FALSE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span style="COLOR: blue">BOOL</span><span style="COLOR: gray"> </span><span style="COLOR: blue">GetRabbitSpeed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">speed</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">1</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">2</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">3</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">4</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">9</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> == </span><span style="COLOR: maroon">5</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = -</span><span style="COLOR: maroon">12</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">6</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">8</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &gt;= </span><span style="COLOR: maroon">9</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">percent</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">10</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">speed</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = -</span><span style="COLOR: maroon">2</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>TRUE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span class=hl-prepro>FALSE</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">PrintRaceResult</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">HANDLE</span><span style="COLOR: gray"> </span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">hOut</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">GetStdHandle</span><span style="COLOR: olive">(</span><span style="COLOR: blue">STD_OUTPUT_HANDLE</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: navy">\</span><span style="COLOR: red">n&nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">; </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray">; </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray">++ </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_GREEN</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">TORTOISE</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tcount</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">tortoisePosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_GREEN</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">COMPLETE_ROAD</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_RED</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">ROAD</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: navy">\</span><span style="COLOR: red">n&nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">START_POS</span><span style="COLOR: gray">; </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: blue">RACE_DISTANCE</span><span style="COLOR: gray">; </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray">++ </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_GREEN</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">RABBIT</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> </span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">rcount</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">rabbitPosition</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_GREEN</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">COMPLETE_ROAD</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">SetConsoleTextAttribute</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray"> </span><span style="COLOR: blue">hOut</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIGHT_YELLOW</span><span style="COLOR: gray"> </span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">ROAD</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br></span><span style="COLOR: olive">}</span></div>
</div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/51026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-25 13:56 <a href="http://www.cppblog.com/k71983/archive/2008/05/25/51026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>经典windows sdk 程序设计网站 ——有好站就会更新，免得到处去找</title><link>http://www.cppblog.com/k71983/archive/2008/05/22/50777.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Thu, 22 May 2008 08:27:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/22/50777.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/50777.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/22/50777.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/50777.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/50777.html</trackback:ping><description><![CDATA[<a href="http://www.winprog.org/tutorial/">http://www.winprog.org/tutorial/</a><br>个人最喜欢的SDK入门教程 使用C<br><br><a href="http://www.relisoft.com/win32/index.htm">http://www.relisoft.com/win32/index.htm</a><br>较喜欢的，使用C++<br><br><a href="http://adrianxw.dk/">http://adrianxw.dk/</a>&nbsp;&nbsp; <br>一些关于windows下的console方面的SDK函数调用<br><br><a href="http://www.functionx.com/win32/">http://www.functionx.com/win32/</a>&nbsp;<br><font color=#0000ff>This site's goal is to provide a few lessons on Win32 programming. Keep in mind that everything you can do with Win32 using a C++ compiler<br><br><a href="http://www.mdstud.chalmers.se/~md7amag/code/wintut/">http://www.mdstud.chalmers.se/~md7amag/code/wintut/</a><br>这个不是太好，不过看看也不错<br><br>http://www.vckbase.com<br>很多源代码和文本资料，文档，<br><br><a href="http://www.csdn.net/">http://www.<font color=#0000ff>c</font>sdn.net</a><br>这个不用说了，问问题的好地方<br><br><a href="http://ntt.cc/2008/05/12/over-480-free-and-fresh-icon-sets-help-you-to-create-your-beautiful-skins-and-themes-in-flex.html">http://ntt.cc/2008/05/12/over-480-free-and-fresh-icon-sets-help-you-to-create-your-beautiful-skins-and-themes-in-flex.html</a><br>各种图表资源索引,顺便就直接从放到这里了，免得还要点击链接！<br><br>
<p>4 free icons of iPhone, designed in scribbled style. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/ipod.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=ipod align=left src="http://ntt.cc/wp-content/uploads/2008/05/ipod-thumb.png" width=200 height=137></a> </p>
<p>&nbsp; By: <a href="http://www.dirceuveiga.com.br/eg" rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p>
<p>&nbsp; Icons in package: 4 </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://fasticon.com/freeware/index.php/web-2-social-bookmark-icons/" rel=nofollow target=_blank><strong><font color=#006699>Web 2 - Social Bookmark Icons</font></strong></a></p>
<p>12 freeware &#8220;iPhone-like&#8221; icons of Web 2 Social Bookmarks for use in blogs, websites, desktops, softwares.</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/iphone-like.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=iPhone-like align=left src="http://ntt.cc/wp-content/uploads/2008/05/iphone-like-thumb.png" width=200 height=140></a> </p>
<p>&nbsp;&nbsp; By: <a href="http://www.dirceuveiga.com.br/eg" rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a></p>
<p>&nbsp; Icons in package: 12 </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://fasticon.com/freeware/index.php/ipod-shuffle/" rel=nofollow target=_blank><strong><font color=#006699>iPod Shuffle Icons</font></strong></a></p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/ipodshuffle-preview.jpg"><font color=#006699><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=ipodshuffle_preview align=left src="http://ntt.cc/wp-content/uploads/2008/05/ipodshuffle-preview-thumb.jpg" width=200 height=155></font></a> </p>
<p>&nbsp; By: <a href="http://www.dirceuveiga.com.br/eg" rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p>
<p>&nbsp; Icons in package: 2 </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://fasticon.com/freeware/index.php/rss-feeds-icon/" rel=nofollow target=_blank><strong><font color=#006699>3D RSS Feeds Icon</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/feeds.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=feeds align=left src="http://ntt.cc/wp-content/uploads/2008/05/feeds-thumb.jpg" width=200 height=145></a> </p>
<p>&nbsp; By:<a href="http://www.dirceuveiga.com.br/eg" rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p>
<p>&nbsp; Icons in package: 1</p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://fasticon.com/freeware/index.php/circle-feeds-icons/" rel=nofollow target=_blank><strong><font color=#006699>Circle Feeds Icons</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/circle-feeds.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=circle_feeds align=left src="http://ntt.cc/wp-content/uploads/2008/05/circle-feeds-thumb.jpg" width=200 height=156></a> </p>
<p>&nbsp; By:<a href="http://www.dirceuveiga.com.br/eg" rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p>
<p>&nbsp; Icons in package: 4</p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.bartelme.at/journal/archive/smiley_devkit/" rel=nofollow target=_blank><strong><font color=#006699>Smiley DevKit</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/smiley-devkit.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=smiley_devkit align=left src="http://ntt.cc/wp-content/uploads/2008/05/smiley-devkit-thumb.png" width=200 height=191></a> By: <a href="http://www.bartelme.at/about" rel=nofollow target=_blank><font color=#006699>bartelmedesign</font></a></p>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://www.bartelme.at/journal/archive/flag_button_devkit/" rel=nofollow target=_blank><strong><font color=#006699>Flag Button Devkit</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/flags.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=flags align=left src="http://ntt.cc/wp-content/uploads/2008/05/flags-thumb.jpg" width=200 height=120></a>&nbsp; By: <a href="http://www.bartelme.at/about" rel=nofollow target=_blank><font color=#006699>bartelmedesign</font></a></p>
<p>&nbsp;&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://yellowicon.com/downloads/" rel=nofollow target=_blank><strong><font color=#006699>Yellow Icon</font></strong></a> </p>
<p>There are many types icons for free download, like PlayStation 3, SuperMan Returns, Star Wars&#8230;etc.. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/yellowicon.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=yellowicon align=left src="http://ntt.cc/wp-content/uploads/2008/05/yellowicon-thumb.png" width=200 height=123></a> </p>
<p>By: <a href="http://yellowicon.com/about/" rel=nofollow target=_blank><font color=#006699>yellowicon team</font></a></p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://www.vistaicons.com/icon/i135s0/openphone_pack.htm" rel=nofollow target=_blank><strong><font color=#006699>OPENPHONE PACK</font></strong></a> </p>
<p>This package includes icons inspirated on the new iPhone </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/openphone.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=openphone align=left src="http://ntt.cc/wp-content/uploads/2008/05/openphone-thumb.png" width=200 height=227></a> </p>
<p>&nbsp; Icons in package: 12 </p>
<p>&nbsp; Icons size: 256&#215;256 </p>
<p>&nbsp; Icons formats: PNG, ICO </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://vikiworks.com/2007/06/15/social-bookmark-iconset/" rel=nofollow target=_blank><strong><font color=#006699>Social Bookmark Iconset</font></strong></a> </p>
<p>These icons designed by a chinese. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/socialbookmark.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=socialbookmark align=left src="http://ntt.cc/wp-content/uploads/2008/05/socialbookmark-thumb.png" width=200 height=90></a> </p>
<p>&nbsp; By: <a href="http://vikiworks.com/about/" rel=nofollow target=_blank><font color=#006699>yichi</font></a> </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://interfacelift.com/icons-mac/details.php?id=1972" rel=nofollow target=_blank><strong><font color=#006699>Mac OS Boxes</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/1972-boxes.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=1972_boxes align=left src="http://ntt.cc/wp-content/uploads/2008/05/1972-boxes-thumb.jpg" width=200 height=107></a> </p>
<p>&nbsp; By: <a href="http://interfacelift.com/icons-mac/artists.php?id=3426" rel=nofollow target=_blank><font color=#006699>Alejandro Lopez</font></a> </p>
<p>&nbsp; Icons in package: 6 </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://interfacelift.com/icons-mac/artists.php?id=277" rel=nofollow target=_blank><strong><font color=#006699>FastIcon.com</font></strong></a></p>
<p>Icons by FastIcon.com: This artist has 41 icon sets containing 657 total icons for Mac OS X listed on InterfaceLIFT. The sets are shown in order of popularity.</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/fasticon.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=FastIcon align=left src="http://ntt.cc/wp-content/uploads/2008/05/fasticon-thumb.png" width=200 height=151></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://iconshock.deviantart.com/gallery/" rel=nofollow target=_blank><strong><font color=#006699>Iconshock&#8217;s Icon Sets</font></strong></a> </p>
<p>There are many cartoon and film icons in the website include Transormers, Finding Nemo, Dragon Ball&#8230;&nbsp; </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/iconshocks-icon-sets.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt="Iconshock&#8217;s Icon Sets" align=left src="http://ntt.cc/wp-content/uploads/2008/05/iconshocks-icon-sets-thumb.png" width=200 height=128></a> </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://pedro-de-la-luna.deviantart.com/art/CS3-Icons-pack-59712759" rel=nofollow target=_blank><strong><font color=#006699>Adobe CS 3 Icon Pack</font></strong></a> </p>
<p>9 PNG icons based on the design of Adobe CS3&#8217;s applications&#8217; boxes </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/cs3-icons-pack-by-pedro-de-la-luna.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=CS3_Icons_pack_by_Pedro_de_la_Luna align=left src="http://ntt.cc/wp-content/uploads/2008/05/cs3-icons-pack-by-pedro-de-la-luna-thumb.jpg" width=200 height=140></a> </p>
<p>&nbsp; By: Pedro de la Luna </p>
<p>&nbsp; Icons in package: 9 </p>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://pedro-de-la-luna.deviantart.com/art/CS3-Icons-pack-Reloaded-60971351" rel=nofollow target=_blank><strong><font color=#006699>CS 3 Icon Pack</font></strong></a> </p>
<p>Including 28 icons, three for each CS3 application (Application - File - Folder) and one empty folder. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/cs3-icons-pack-reloaded-by-pedro-de-la-lunapng.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=CS3_Icons_pack_Reloaded_by_Pedro_de_la_Luna.png align=left src="http://ntt.cc/wp-content/uploads/2008/05/cs3-icons-pack-reloaded-by-pedro-de-la-lunapng-thumb.jpg" width=200 height=140></a> </p>
<p>By: Pedro de la Luna </p>
<p>&nbsp; Icons in package: 9</p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://www.iconaholic.com/downloads.html" rel=nofollow target=_blank><strong><font color=#006699>mAqua ChronoSync</font></strong></a> </p>
<p>Free for personal use only, if for commercial use, need payment. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/maqua-chronosync.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt="mAqua ChronoSync" align=left src="http://ntt.cc/wp-content/uploads/2008/05/maqua-chronosync-thumb.png" width=200 height=168></a> </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><strong>&nbsp; </strong><a href="http://interfacelift.com/icons-win/details.php?id=1865" rel=nofollow target=_blank><strong><font color=#006699>Aqua Neue (Graphite)</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/01865-aquaneuegraphite.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=01865_aquaneuegraphite align=left src="http://ntt.cc/wp-content/uploads/2008/05/01865-aquaneuegraphite-thumb.jpg" width=200 height=106></a> </p>
<p>&nbsp; By: Pedro de la Luna </p>
<p>&nbsp; Icons in package: 86 </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h5><a href="http://www.zeusboxstudio.com/blog/feedicons-2" rel=nofollow target=_blank><font color=#006699>Feedicons 2</font></a></h5>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/2.png"><font color=#006699><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=2 align=left src="http://ntt.cc/wp-content/uploads/2008/05/2-thumb.png" width=200 height=148></font></a> </p>
<p>&nbsp; By: Kuswanto </p>
<p>&nbsp; Download: </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://icons.alanwho.com/104-standard-pc-keyboard-keys-icon-set/" rel=nofollow target=_blank><strong><font color=#006699>104 Standard PC Keyboard Key Icons</font></strong></a> </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/pckeys1.jpg"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=pckeys1 align=left src="http://ntt.cc/wp-content/uploads/2008/05/pckeys1-thumb.jpg" width=200 height=175></a> </p>
<p>&nbsp; By: <a href="http://icons.alanwho.com/104-standard-pc-keyboard-keys-icon-set/" rel=nofollow target=_blank><font color=#006699>Alan Who</font></a> </p>
<p>&nbsp; Icons in package: 104 </p>
<p>&nbsp; Download: </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.pixelgirlpresents.com/icons.php" rel=nofollow target=_blank><strong><font color=#006699>Mac OS X Icons</font></strong></a> </p>
<p>There are 248 icon sets in Mac OS X.</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/mac-os-x-icons.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt="Mac OS X Icons " align=left src="http://ntt.cc/wp-content/uploads/2008/05/mac-os-x-icons-thumb.png" width=200 height=169></a> </p>
<p>&nbsp;</p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p><a href="http://iconbee.willmayo.com/" rel=nofollow target=_blank><strong><font color=#006699>Icon Bee</font></strong></a></p>
<p>It is like a Bee collect many interesting free icon download website.&nbsp; </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/iconbee.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=iconbee align=left src="http://ntt.cc/wp-content/uploads/2008/05/iconbee-thumb.png" width=200 height=123></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.vistaicons.com/icon_collections.htm" rel=nofollow target=_blank><strong><font color=#006699>Vistaicons.com</font></strong></a></p>
<p>VistaIcons.com is a collection of free Vista Style icon sets of over 2500 high quality icons in png and ico format. From VistaIcons.com you can freely download 256&#215;256 PNG icons for Windows Vista</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/vistaicons.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=Vistaicons align=left src="http://ntt.cc/wp-content/uploads/2008/05/vistaicons-thumb.png" width=200 height=148></a> </p>
<p>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://interfacelift.com/icons-win/artists.php" rel=nofollow target=_blank><strong><font color=#006699>Free Microsoft Windows Icons</font></strong></a></p>
<p>It has a big database of Windows icon artists and designers.</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/icons-win.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=icons-win align=left src="http://ntt.cc/wp-content/uploads/2008/05/icons-win-thumb.png" width=200 height=152></a>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.famfamfam.com/" rel=nofollow target=_blank><strong><font color=#006699>famfamfam.com</font></strong></a> </p>
<p>It is apersonal site and web playground of Birmingham (UK) based developer Mark James. There are many sets of icon for free download include silk web icons, flag icons&#8230;</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/famfamfam.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=famfamfam align=left src="http://ntt.cc/wp-content/uploads/2008/05/famfamfam-thumb.png" width=200 height=122></a> </p>
<h5></h5>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.iconbuffet.com/freedelivery/packages" rel=nofollow target=_blank><strong><font color=#006699>iconbuffet.com</font></strong></a></p>
<p>IconBuffet is home to a tasty plethora of free icons. Collect them, download them, trade them with your friends. They&#8217;re kinda like baseball cards, only without the steroids. And you can use them on your website.</p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/iconbuffet.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=IconBuffet align=left src="http://ntt.cc/wp-content/uploads/2008/05/iconbuffet-thumb.png" width=200 height=123></a> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.interfacelift.com/" rel=nofollow target=_blank><strong><font color=#006699>interfacelift.com</font></strong></a></p>
<p>InterfaceLIFT is your source for graphical user interface enhancements for Mac OS X, Microsoft Windows, and Linux. They specialize in desktop wallpaper, icons, themes, and news with a focus on community. New content is posted virtually every day.</p>
<p><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=InterfaceLIFT align=left src="http://ntt.cc/wp-content/uploads/2008/05/interfacelift.png" width=200 height=130> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.iconshock.com/" rel=nofollow target=_blank><strong><font color=#006699>iconshock.com</font></strong></a> </p>
<p>There are 497225 quality icons in 175 icon collections&#8230; and counting. </p>
<p><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=iconshock align=left src="http://ntt.cc/wp-content/uploads/2008/05/iconshock.png" width=200 height=123> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://www.iconbase.com/" rel=nofollow target=_blank><strong><font color=#006699>iconbase.com</font></strong></a> </p>
<p>Here you&#180;ll find the best icons from the best artists in the world. The icons here listed belong to the individual authors and companies. They are free for personal and non commercial use. If you are an icon artist and desire to share your work with the world, this is your place. Just click on the submit menu and follow the easy steps to add your icons. </p>
<p><a href="http://ntt.cc/wp-content/uploads/2008/05/iconbase.png"><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=iconbase align=left src="http://ntt.cc/wp-content/uploads/2008/05/iconbase-thumb.png" width=200 height=130></a>&nbsp; </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="http://mintywhite.com/tech/xp/high-quality-free-icon-sets/" rel=nofollow target=_blank><strong><font color=#006699>Mintywhite.com</font></strong></a></p>
<p>A list of 90 icon packs that you can download for free.<br>(include Vista High PX, Office Space Icon Set for Windows Vista, iVista Icon Pack, iVista Icon Pack 2, XP Icons,Royalty Free Icons for Toolbar and Web,Friendly Fire Icon Pack,Yoritsuki Icons,Antique Icons,Vista Glass Folder Icons,Arzo Icons Vol. 1,Gaming Icons Pack,Mario Galaxy Luma Icons,Christmas Icons,Wifun Icons by Rokey,Grzanka&#8217;s Icons,Fantastic Dream by Rokey,Eico 1 year by Rokey,128&#215;128 Icons Set 5,Antares Iconset,Perfect Fanstasy,Monster Icons,128&#215;128 Icons Set 4,iMac Icons,Camino Icons,Nes Icons Pack,iLife and iWork &#8216;08 Icons,Mouse Category Season 03 etc&#8230;)</p>
<p><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt=high-quality-free-icon-sets src="http://ntt.cc/wp-content/uploads/2008/05/high-quality-free-icon-sets.png" width=200 height=174></p>
</font>
<img src ="http://www.cppblog.com/k71983/aggbug/50777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-22 16:27 <a href="http://www.cppblog.com/k71983/archive/2008/05/22/50777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针一——基本用法和一些需要清楚的概念</title><link>http://www.cppblog.com/k71983/archive/2008/05/21/50700.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Wed, 21 May 2008 14:35:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/21/50700.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/50700.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/21/50700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/50700.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/50700.html</trackback:ping><description><![CDATA[<p>1.指针变量的声明和初始化<br>指针就是把内存地址做为其值的变量。<br>(1)指针是一个变量<br>(2)普通变量直接引用了一个值<br>如:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span></div>
</div>
<p>那么a的值就是3。<br>(3)指针变量只存放内存地址<br>(4)指针存放的内存地址往往存放有实际的值，但也可能是另外一个指针<br>如:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//把a的地址通过取地址运算符赋给指针变量 aptr</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">aptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//打印出指针的值，用16进制的方式</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//打印出a的地址，用16进制的方式</span></div>
</div>
<p>(5)指针变量名间接应用了一个值,我们使用间接引用运算符来取得具体的值<br>printf (&#8221;%d&#8221;, *aptr);</p>
<p>(6)指针必须初始化,可以把指针初始化为NULL<br>NULL在<stdio.h>中定义，它的值是0<br>使用NULL使程序具有可读性。</p>
<p>注意：<br>&amp; 取地址运算符 取得任何变量的地址<br>如：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">aptr</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">c</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">5</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br></span><span style="COLOR: #ffa500">//使用&amp;运算符取得地址，并打印出来</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//取得整型变量a的内存地址</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">aptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//取得指针变量aptr的内存地址</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">c</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">0</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//取得数组第一个元素的内存地址</span></div>
</div>
<p>* 比较让大家迷惑的是它在这里有两种不同的用法，但实际上它们并不是同样的<br>(1)和具体的数据类型一起构成对应的指针类型<br>*在声明语句表示变量是一个指针</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> *<br></span><span class=hl-types>float</span><span style="COLOR: gray"> *<br></span><span class=hl-types>char</span><span style="COLOR: gray"> *<br></span><span class=hl-types>double</span><span style="COLOR: gray"> *</span></div>
</div>
<p>(2)间接引用运算符</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//把a的地址通过取地址运算符赋给指针变量 aptr</span><span style="COLOR: gray"><br>&nbsp;<br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%d</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, *</span><span style="COLOR: blue">aptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//通过a的地址间接引用变量a的值</span></div>
</div>
<p>思考：<br>仔细分析下面的语句的结果。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">8</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br>&nbsp;<br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp; * </span><span style="COLOR: blue">aPtr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%p</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, * &amp; </span><span style="COLOR: blue">aPtr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>提示，一层层分析，可以看做 &amp;(*aPtr)<br>答案在最下面。</p>
<p>二、指针的传引用调用<br>1.C语言中所有的函数都是传值调用<br>为什么，难道指针不是传引用调用吗？<br>不是，C语言只是把指针的值拷贝一份，传如函数内部。<br>2.那么传递数组呢？</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">printArray</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">nPtr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>和</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">printArray</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">array</span><span style="COLOR: olive">[])</span><span style="COLOR: gray">;</span></div>
</div>
<p>的效果都是一样的，都是传一个地址进去。<br>另外，要注意：<br>数组名本身就是地址。<br>3.指针的传引用调用我们也可称之为模拟传引用调用，因为我们传的是一个地址，<br>函数调用时，函数的参数会拷贝这个地址，然后通过复引用来操作变量。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">cubeByReference</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">nPtr</span><span style="COLOR: olive">)</span><span style="COLOR: #ffa500">//计算立方</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;*</span><span style="COLOR: blue">nptr</span><span style="COLOR: gray"> = *</span><span style="COLOR: blue">nptr</span><span style="COLOR: gray"> * *</span><span style="COLOR: blue">nptr</span><span style="COLOR: gray"> * *</span><span style="COLOR: blue">nptr</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意这里，<br>(1)*(复引用运算符)比*(乘法运算符)优先级要高。<br>所以可以不适用括号，但是推荐你使用下面的语句，这样程序更加清晰。<br>(2)nPtr是占用堆栈的，函数cubeByReference会给nPtr这个指针变量分配空间，<br>然后把传入的指针变量的值赋给它。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">cubeByReference</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">nPtr</span><span style="COLOR: olive">)</span><span style="COLOR: #ffa500">//计算立方</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">nptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> = </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">nptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> * </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">nptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> * </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: blue">nptr</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>4.传值为什么不改变传入变量的值<br>因为它是在堆栈中生成一个新的变量，然后把存放的值拷贝过来，最后函数结束的时候把该变量从堆栈中释</p>
<p>放掉，所以并不会改变传入变量的值。<br>就像你用一张新的纸把一张纸上的东西复制一遍，然后在新的纸上写写画画，然后丢掉，并不会影响到原来</p>
<p>的纸上的内容。<br>5.传指针(也就是传引用为什么会改变)<br>因为指针给出了原来变量的地址，使得*(复引用指针)可以通过这个地址找到这个变量并对它进行修改。</p>
<p>三、指针的const限定<br>(1)指向非常量数据的非常量指针</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">b</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">b</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span><span style="COLOR: gray"><br>*</span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span></div>
</div>
<p>(2)指向常量数据的非常量指针(不能修改指向变量中的数据)</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray">;</span></div>
</div>
<p>注意：const 修饰int</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">b</span><span style="COLOR: gray">;<br></span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">b</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span><span style="COLOR: gray"><br>*</span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//ERROR 不能修改指向的变量中的数据</span></div>
</div>
<p>(3)指向非常量数据的常量指针(不能东指西指)</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray">;</span></div>
</div>
<p>注意: const 修饰指针变量 aptr;<br>数组名是一个很好的例子。(参见字符串数组中的说明。)</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">b</span><span style="COLOR: gray">;<br></span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">b</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//ERROR&nbsp; 不能再指向另外一个变量</span><span style="COLOR: gray"><br>*</span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//OK</span></div>
</div>
<p>(4)指向常量数据的常量指针(不能修改指向变量中的数据,不能东指西指)<br>const int * const aPtr;</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">b</span><span style="COLOR: gray">;<br></span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">a</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">aPtr</span><span style="COLOR: gray"> = &amp;</span><span style="COLOR: blue">b</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//ERROR&nbsp; 不能再指向另外一个变量</span><span style="COLOR: gray"><br>*</span><span style="COLOR: blue">aptr</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//ERROR&nbsp; 不能修改指向的变量中的数据</span></div>
</div>
<p>答案：<br>1.实际上*aPtr相当于a, &amp;*aPtr就取得a的地址<br>2.&amp;aPtr取得aPtr的直至，而*&amp;aPtr就取得aPtr存放的值，也就是a的地址<br>3.&amp;*会相互抵消，实际上&amp;*aPtr == aPtr == *&amp;aPtr</p>
<img src ="http://www.cppblog.com/k71983/aggbug/50700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-21 22:35 <a href="http://www.cppblog.com/k71983/archive/2008/05/21/50700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储类、链接和内存管理(三)——volatile和restrict</title><link>http://www.cppblog.com/k71983/archive/2008/05/12/49619.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Mon, 12 May 2008 03:12:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/12/49619.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/49619.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/12/49619.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/49619.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/49619.html</trackback:ping><description><![CDATA[<p>一、类型限定词volatile<br>限定词volatile告诉编译器该变量除了可以被程序改变以外还可被其他代理改变。<br>它通常被用于硬件地址和与其它并行运行的程序共享的数据。<br>如：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>volatile</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">locl</span><span style="COLOR: gray">; <br></span><span class=hl-types>volatile</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">ploc</span><span style="COLOR: gray">;</span></div>
</div>
<p>你可能会奇怪为什么ANSI觉得有必要把volatile作为一个关键字。<br>原因是它可以方便编译器优化。<br>例如</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">val1</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">x</span><span style="COLOR: gray">;<br></span><span class=hl-mlcomment>/* 一些不使用x的代码 */</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">val2</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">x</span><span style="COLOR: gray">;</span></div>
</div>
<p>一个聪明的编译器可能注意到你使用了两次x,而没有改变它的值。那么，它有可能把x临时存储在一个寄存器中。<br>接着，当val2需要x时，可以通过从寄存器而非初始的内存位置中读取该值以节省时间。<br>这个过程被称为缓存(caching)。<br>通常，缓存是一个好的优化方式，但是如果在两个语句间其他代理改变了x的话就不是这样了。<br>如果没有规定volatile关键字，那么编译器将无从得知这种改变是否可能发生。<br>在ANSI中，如果声明中没有volatile关键字，那么编译器就可以假定一个值在使用过程中没有被修改，它就可以试着优</p>
<p>化代码。<br>一个值可以同时是const 和 volatile。<br>例如，硬件时钟一般设定为不能由程序改变，这一点使它成为const;<br>但它被程序以外的代理改变，这使它成为volatile.<br>那么我们可以这么声明：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>volatile</span><span style="COLOR: gray"> </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">loc</span><span style="COLOR: gray">;<br></span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>volatile</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">ploc</span><span style="COLOR: gray">;</span></div>
</div>
<p>二、类型限定词restrict<br>关键字restrict用来消除数据间的相关性，编译器从而可以安排语句的并行执行。<br>它只可以用于指针，并表明指针是访问一个数据对象的唯一且初始的方式。<br>我们通过一个例子来看看：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">ar</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">10</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">par</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">ar</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">restrict</span><span style="COLOR: gray"> </span><span style="COLOR: blue">restar</span><span style="COLOR: gray"> = </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> *</span><span style="COLOR: olive">)</span><span style="COLOR: blue">malloc</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: maroon">10</span><span style="COLOR: gray"> * </span><span style="COLOR: green">sizeof</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: olive">))</span><span style="COLOR: gray">;</span></div>
</div>
<p>注意，指针restar是访问由malloc ()分配的内存的唯一且初始的方式。<br>因此，它可以由关键字restrict限定。<br>而指针par既不是初始的，也不是访问数组ar中数据的唯一方式，因此不可以把它限定为restrict。<br>考虑下面的语句：</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">n</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">n</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">10</span><span style="COLOR: gray">; </span><span style="COLOR: blue">n</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">par</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> += </span><span style="COLOR: maroon">5</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">restar</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> += </span><span style="COLOR: maroon">5</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">ar</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> *= </span><span style="COLOR: maroon">2</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">par</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> += </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">restar</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> += </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>知道了restar是放问它所指向数据块的唯一初始化方式，编译器就可以用具有同样效果的一条语句来代替包含restar的</p>
<p>两个语句。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">resatr</span><span style="COLOR: gray"> </span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> += </span><span style="COLOR: maroon">8</span><span style="COLOR: gray">;</span></div>
</div>
<p>然而，编译器将两个包含par的语句精简为一个语句将导致计算错误。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">par</span><span style="COLOR: olive">[</span><span style="COLOR: blue">n</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> +=</span><span style="COLOR: maroon">8</span><span style="COLOR: gray">;</span></div>
</div>
<p>原因是ar[n] *= 2;这条语句在par[n] += 3之前已经改变了par指针所指向数据的值。</p>
<p>restrict的作用：帮助编译器确定使指针进行数值计算时，是否可以进行优化。<br>可以将关键字restrict作为指针型函数参量的限定词使用。<br>这意味着编译器可以假定在函数体内没有其它标识符修改指针指向的数据，因而可以试着优化代码，反之则不然。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">voie</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">memcpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">restrict</span><span style="COLOR: gray"> </span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>void</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">restrict</span><span style="COLOR: gray"> </span><span style="COLOR: blue">s2</span><span style="COLOR: gray">, </span><span style="COLOR: blue">size_t</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>关键字restrict有两个读者。<br>一个是编译器，它告诉编译器可以自由地去做一些有关优化的假定。<br>一个是用于，它告诉用户仅使用满足restrict要求的参数。</p>
<img src ="http://www.cppblog.com/k71983/aggbug/49619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-12 11:12 <a href="http://www.cppblog.com/k71983/archive/2008/05/12/49619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储类、链接和内存管理(二)——链接、存储时期</title><link>http://www.cppblog.com/k71983/archive/2008/05/06/49041.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Tue, 06 May 2008 12:18:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/06/49041.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/49041.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/06/49041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/49041.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/49041.html</trackback:ping><description><![CDATA[<p>2.链接<br>一个C变量具有下列链接之一:<br>外部链接 (external linkage)<br>内部链接 (internal linkage)<br>空链接 (no linkage)<br>具有代码块作用域或者函数原型作用域的变量具有空链接，意味着它们是由其定义所在的代码块或函数原型所私有的。<br>具有文件作用域的变量可能有内部或者外部链接。<br>一个具有外部链接的变量可以在一个多文件程序的任何地方使用。<br>一个具有内部链接的变量可以在一个文件的任何地方使用。<br>那怎样知道一个文件作用域变量具有内部链接还是外部链接?<br>你可以看看在外部定义中是否使用了存储类说明符static:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">giants</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">5</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//文件作用域，外部链接</span><span style="COLOR: gray"><br></span><span class=hl-types>static</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">dodgers</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//文件作用域，内部链接</span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">()</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;&#8230;&#8230;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>和该文件属于同一程序的其他文件可以使用变量giants。<br>变量dodgers是该文件私有的，但是可以被该文件中的任一函数使用。</p>
<p>2.存储时期<br>一个C变量有两种存储时期之一：<br>静态存储时期(static storage duration)和自动存储时期(automatic storage duration)。<br>如果一个变量具有静态存储时期，它在程序执行期间将一直存在。<br>具有文件作用域的变量具有静态存储时期。<br>注意对于具有文件作用域的变量，关键字static表示链接类型，并非存储时期。<br>因为所有的文件作用域变量，无论它具有内部链接，还是具有外部链接，都具有静态存储时期。</p>
<p>具有代码块作用域的变量一般情况下具有自动存储时期。<br>当程序进入定义这些变量的代码块时，将为这些变量分配内存。<br>当推出这个代码块时，内存将被释放。<br>这样，在一个函数调用结束后，它的变量所占用的内存空间可以用来存储下一个被调用函数的变量。</p>
<p>到现在我们所使用的局部变量都属于自动类型。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">bore</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">number</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">index</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">index</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">index</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">number</span><span style="COLOR: gray">; </span><span style="COLOR: blue">index</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">They don't make them the way they used to.</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div>
</div>
<p>总论：c使用作用域、链接和存储时期来定义5中存储类。<br>自动，寄存器、具有代码块作用域的静态、具有外部链接的静态、具有内部链接的静态<br>1.自动变量<br>自动变量具有自动存储时期、代码块作用域和空链接。<br>默认情况下，在代码块或函数的头部定义的任意变量都属于自动存储类。<br>你可以显示的使用关键字auto来表明一个变量为自动变量，但我们一般不写。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>auto</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">plox</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">loop</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">m</span><span style="COLOR: gray">;&nbsp; </span><span style="COLOR: #ffa500">// m的作用域</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">scanf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%d</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, &amp;</span><span style="COLOR: blue">m</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">// m和i的作用域</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: blue">m</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">n</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">i is local to a sub-block</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: blue">m</span><span style="COLOR: gray">;&nbsp; </span><span style="COLOR: #ffa500">// m的作用域, i已经消失</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div>
</div>
<p>如果在内层代码块定义了一个具有和外层代码块便来那个同一名字的变量，将会怎样?<br>(最好不要在你的代码中这样做)<br>这时内层代码块将使用在内层代码块中这个新定义的变量。<br>我们称之为内层定义覆盖(hide)了外部定义，只有当运行离开内层代码块是，外部变量才会重新恢复使用。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">x</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">30</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">x in outer block: %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">x</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">x</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">77</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">x in inner block: %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">x</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意：<br>c99中规定，语句若为循环或者if语句的一部分，即使没有使用{},也认为是一个代码块。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">10</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Initially, n = %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">; </span><span style="COLOR: blue">n</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">; </span><span style="COLOR: blue">n</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">loop : n = %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Initially, n = %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意：<br>除非您显式地初始化自动变量，否则它不会被自动初始化。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">repid</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">tents</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">5</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>repid的初值则是先前占用分配给它的空间的任意值。不要指望这个值是0。</p>
<p>2.寄存器变量<br>通常，变量存储在计算机内存中。如果幸运，寄存器变量可以被存储在CPU的寄存器中，这样速度会更快。<br>在其它许多方面，它和自动变量是一样的。<br>通过使用存储类型说明符register可以声明寄存器变量。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>register</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">quick</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>我们说如果幸运是因为声明一个寄存器类变量仅仅是一个请求，而不是一条直接命令。<br>因为CPU寄存器往往很少，编译器必须在可用寄存器的个数和可用高速内存的数量之间做权衡。<br>这种情况下，变量成为一个普通的自动变量。<br>但是，你不能对它使用地址运算符。<br>可以把一个形式参量请求为寄存器变量。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">macho</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>register</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span></div>
</div>
<p>3.具有代码块作用域的静态变量<br>静态变量像是一个不可变的变量。<br>但实际上，静态指变量的的位置固定不动。<br>具有文件作用域的变量自动的具有静态存储时期。<br>也可以创建具有代码块作用域，兼具有静态存储的局部变量。<br>这些变量和自动变量具有相同的作用域，当包含这些变量的函数完成工作时，它们并不消失。<br>从一次函数调用到下一次调用，计算机都记录着他们的值。<br>我们可以使用存储类说明符static在代码块内声明这些变量。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">trystat</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">count</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">count</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">; </span><span style="COLOR: blue">count</span><span style="COLOR: gray"> &lt;= </span><span style="COLOR: maroon">3</span><span style="COLOR: gray">; </span><span style="COLOR: blue">count</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Here comes iteration %d:</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">count</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">trystat</span><span style="COLOR: gray"> </span><span style="COLOR: olive">()</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">trystat</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">fade</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>static</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">stay</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">fade = %d and stay = %d</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">fade</span><span style="COLOR: gray">++, </span><span style="COLOR: blue">stay</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意：<br>对函数参数不能使用static。<br>4.具有外部链接的静态变量<br>具有外部链接的静态变量具有文件作用域、外部链接和静态存储时期。<br>这一类型的变量成为外部变量 external variable。<br>把变量的定义声明放在所有函数之外，即创建了一个外部变量。<br>为了使程序更加清晰，可以在使用外部变量的函数中通过使用extern关键字来再次声明它。<br>如果变量是在别的文件中定义的，使用extern来声明该变量就是必须的。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">Errupt</span><span style="COLOR: gray">;&nbsp; </span><span style="COLOR: #ffa500">//外部定义的变量</span><span style="COLOR: gray"><br></span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">Up</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">100</span><span style="COLOR: olive">]</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">//外部声明的数组</span><span style="COLOR: gray"><br></span><span class=hl-types>extern</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">Coal</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">//必须的声明，因为Coal在其它文件中定义</span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">next</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>extern</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">Errupt</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//可选的声明</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>extern</span><span style="COLOR: gray"> </span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">Up</span><span style="COLOR: olive">[]</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//可选的声明</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">next</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意：<br>不同于自动变量，如果您不对外部变量进行初始化，他们将自动被赋初值0。<br>这一原则也适用于外部定义的数组。</p>
<p>5.具有内部静态链接的静态变量<br>通过使用存储类说明符(注意不是静态变量声明符)static在所有函数的外部进行定义，前面已经说过该变量为整个文件私有</p>
<p>，这里不再讨论。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">traveler</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">//外部链接</span><span style="COLOR: gray"><br></span><span class=hl-types>static</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">stayhome</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">1</span><span style="COLOR: gray">; </span><span style="COLOR: #ffa500">//内部链接</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/49041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-06 20:18 <a href="http://www.cppblog.com/k71983/archive/2008/05/06/49041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储类、链接和内存管理(一)——作用域</title><link>http://www.cppblog.com/k71983/archive/2008/05/06/49028.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Tue, 06 May 2008 10:21:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/06/49028.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/49028.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/06/49028.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/49028.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/49028.html</trackback:ping><description><![CDATA[<p>存储类、链接和内存管理<br>1.作用域<br>作用域描述了程序中可以访问一个标识符的一个或多个区域。<br>一个C变量的作用域可以是代码块作用域、函数原型作用域或者文件作用域。<br>代码块作用域<br>一个代码块是包含在开始花括号和对应的结束花括号之内的一段代码。<br>例如，整个函数体是一个代码块。<br>一个函数内的任一复合语句也是代码块。<br>在代码快中定义的变量具有代码块作用域(block scope),从该变量被定义的地方到包含该定义的代码块的末尾该变量均可见</p>
<p>。<br>另外，函数的形式参数尽管在函数的开始花括号前进行定义，也同样具有代码块作用域,并且属于包含函数体的代码块。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">blocky</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">cleo</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">patrick</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0.0</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: blue">patrick</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>在上面这个例子中，cleo和patrick都有知道结束花括号的代码作用域。</p>
<p>在一个内部代码块中声明的变量，其作用域只局限于该代码块：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">blocky</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">cleo</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">patrick</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0.0</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">10</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">q</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">cleo</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">i</span><span style="COLOR: gray">;&nbsp; </span><span style="COLOR: #ffa500">// q作用域的开始</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&#8230;&#8230;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">patrick</span><span style="COLOR: gray"> *= </span><span style="COLOR: blue">q</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: #ffa500">//q作用域的结束</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: blue">patrick</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>在这个例子中，q的作用域被限制在内部代码块内，只有该代码内的代码可以访问q。<br>C99允许在一个代码块中的任何位置声明变量，使用之前请注意编译器能不能支持。<br>如，你可以这样声明</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">10</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++ </span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">A C99 feature: i=%d</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">i</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>2.函数原型作用域<br>从变量定义处一直到原型声明的末尾，这意味着编译器在处理一个函数原型的参数时，它所关心的只是该参数的类型；您使</p>
<p>用的名字是无关紧要的。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">mighty</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">mouse</span><span style="COLOR: gray">, </span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">large</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>3.文件作用域<br>一个在所有函数之外定义的变量具有文件作用域 (file scope)。<br>具有文件作用域的便狼从它定义处到包含该定义的文件结尾处都是可见的。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">units</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;</span><span style="COLOR: #ffa500">//具有文件作用域的变量</span><span style="COLOR: gray"><br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">critic</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;&#8230;&#8230;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>void</span><span style="COLOR: gray"> </span><span style="COLOR: blue">critic</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;&#8230;&#8230;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>这里，变量units具有文件作用域，在main ()和critic ()中都可以使用它。因为它们可以在不止一个函数中使用，文件作用域变量也被称为全局变量(global varibale)。</p>
<p>4.goto<br>函数作用域只适用于goto语句使用的标签。函数作用域意味着一个特定函数中的goto标签对该函数中任何地方的代码都是可见的，无论该标签出现在哪一个代码块中。</p>
<img src ="http://www.cppblog.com/k71983/aggbug/49028.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-06 18:21 <a href="http://www.cppblog.com/k71983/archive/2008/05/06/49028.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串函数(三)</title><link>http://www.cppblog.com/k71983/archive/2008/05/06/49009.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Tue, 06 May 2008 07:28:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/06/49009.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/49009.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/06/49009.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/49009.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/49009.html</trackback:ping><description><![CDATA[<p>1.strncmp ()函数<br>strncmp ()函数可以比较到字符串的不同处，也可以比较完由第三个参数指定的字符串。<br>例如，如果想搜索以&#8221;astro&#8221;开头的字符串，您可以限定搜索前5个字符。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//使用strncmp ()函数</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#inlcude</span><span style="COLOR: gray"> &lt;</span><span style="COLOR: blue">string</span><span style="COLOR: gray">.</span><span style="COLOR: blue">h</span><span style="COLOR: gray">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LISTSIZE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">5</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">list</span><span style="COLOR: olive">[</span><span style="COLOR: blue">LISTSIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">astronomy</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">astounding</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">astrophysics</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">ostracize</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">asterism</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">count</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">LISTSIZE</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">strncmp</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">list</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">]</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">astro</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: maroon">5</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> == </span><span style="COLOR: maroon">0</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Found: %s</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">list</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">count</span><span style="COLOR: gray">++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">The list contained %d words beginning with astro.</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">count</span><span style="COLOR: olive">)</span><span style="COLOR: gray">; <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>2.strcpy () 和strncpy ()函数<br>如果pts1和pts2都是指向字符串的指针，则下面的表达式只复制字符串的地址而不是字符串本身。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">pts1</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">pts2</span><span style="COLOR: gray">;</span></div>
</div>
<p>如果你确实希望复制字符串，那么可以使用strcpy ()函数。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//copy1.c strcpy ()示例</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">string.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro> //声明strcpy ()函数</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">SIZE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">40</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">5</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">LIM</span><span style="COLOR: olive">][</span><span style="COLOR: blue">SIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">temp</span><span style="COLOR: olive">[</span><span style="COLOR: blue">SIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Enter %d words beginning with q:</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIM</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">gets</span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: olive">))</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">0</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> != '</span><span style="COLOR: blue">q</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%s doesn't begin with q!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">temp</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">strcpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">]</span><span style="COLOR: gray">, </span><span style="COLOR: blue">temp</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">i</span><span style="COLOR: gray">++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray">&nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Here are the words accepted:</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>请注意只有当输入的单词通过了q判断，计数值i才会增加。<br>这里使用了一个基于字符的判断</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">0</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> != '</span><span style="COLOR: blue">q</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span></div>
</div>
<p>这相当于</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">strncmp</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">q</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: maroon">1</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> != </span><span style="COLOR: maroon">0</span><span style="COLOR: olive">)</span></div>
</div>
<p>注意在，strcpy 两个参数中，第二个参数temp指向的字符串被复制到第一个参数qword[i]所指向的数组中。<br>temp被称为源字符串，qword被称为目标字符串。<br>为什么要这么设计，为什么不设计到前面？<br>如果注意到它和赋值语句的顺序一样，目标在左边，就很容易记住参数的顺序。</p>
<p>3.strcpy ()的其它特性<br>首先，它是一个char *类型，它返回的是第一个参数的值。<br>第二，第一个参数不需要指向数组的开始，这样就可以只复制数组的一部分。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//copy2.c</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">string.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">WORDS</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">beast</span><span style="COLOR: #8b0000">"</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">SIZE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">40</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">orig</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">WORDS</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">copy</span><span style="COLOR: olive">[</span><span style="COLOR: blue">SIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Be the best that you can be.</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">ps</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">orig</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">copy</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">ps</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">strcpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">copy</span><span style="COLOR: gray"> + </span><span style="COLOR: maroon">7</span><span style="COLOR: gray">, </span><span style="COLOR: blue">orig</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">copy</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">ps</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意ps指向copy的第8个元素，这是因为第一个参数是copy + 7。</p>
<p>4. strncpy ()<br>strcpy ()的缺点显而易见，它不检查目标字符串是否能容纳得下源字符串。<br>strncpy ()会用第三个参数指明最大可复制的字符数。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//copy3.c strncpy ()示例</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">string.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro> //声明strcpy ()函数</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">SIZE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">40</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">7</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">5</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">LIM</span><span style="COLOR: olive">][</span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">temp</span><span style="COLOR: olive">[</span><span style="COLOR: blue">SIZE</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Enter %d words beginning with q:</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">LIM</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">gets</span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: olive">))</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">temp</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">0</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> != '</span><span style="COLOR: blue">q</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%s doesn't begin with q!</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">temp</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">else</span><span style="COLOR: gray"> <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">strncpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">]</span><span style="COLOR: gray">, </span><span style="COLOR: blue">temp</span><span style="COLOR: gray">, </span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: gray"> - </span><span style="COLOR: maroon">1</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">][</span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: gray">-</span><span style="COLOR: maroon">1</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">';<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">i</span><span style="COLOR: gray">++;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray">&nbsp; &nbsp; &nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Here are the words accepted:</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray">=</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>注意，在这里函数复制的字符串可能最后没有空字符，所以你必须手动在最后放置一个空字符，而且注意这里是复制n个字符过去，所以要留一个给空字符</p>
<p>，所以在这里是TARGSIZE - 1;</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">strncpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">]</span><span style="COLOR: gray">, </span><span style="COLOR: blue">temp</span><span style="COLOR: gray">, </span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: gray"> - </span><span style="COLOR: maroon">1</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">qwords</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">][</span><span style="COLOR: blue">TARGSIZE</span><span style="COLOR: gray">-</span><span style="COLOR: maroon">1</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">';</span></div>
</div>
<p>5.sprintf ()函数<br>sprintf ()函数是在stdio.h而不是在string.h中声明的。<br>它的作用和printf ()一样，但是它写到字符串里而不是写到输出显示。<br>它提供了把几个元素组合成一个字符串的一种途径。<br>sprintf ()的第一个参数是目标字符串地址。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//format.c</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span class=hl-prepro>MAX</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">20</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&nbsp;<br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">first</span><span style="COLOR: olive">[</span><span class=hl-prepro>MAX</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">last</span><span style="COLOR: olive">[</span><span class=hl-prepro>MAX</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">formal</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">2</span><span style="COLOR: gray"> * </span><span class=hl-prepro>MAX</span><span style="COLOR: gray"> + </span><span style="COLOR: maroon">10</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>double</span><span style="COLOR: gray"> </span><span style="COLOR: blue">prize</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Enter your first name: </span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">gets</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">first</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Enter your last name: </span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">gets</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">last</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Enter your prize money: </span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">scanf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%1f</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">prize</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">sprintf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">formal</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%s, %-19s: $%6.2f</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: blue">last</span><span style="COLOR: gray">, </span><span style="COLOR: blue">first</span><span style="COLOR: gray">, </span><span style="COLOR: blue">prize</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">puts</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">formal</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>6.其它字符串函数</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strcpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数把s2指向的字符串(包括空字符)复制到s1指向的位置，返回值是s1。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strncpy</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: gray">, </span><span style="COLOR: blue">size_t</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数把s2指向的字符串(包括空字符)复制到s1指向的位置，复制的字符数不超过n个。返回值是s1。<br>空字符后的字符串不被复制。<br>如果源字符串的字符数小于n个，在目标字符串中就以空字符填充。<br>如果源字符串的字符数大于或等于n个，空字符就不被复制。返回值是s1。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strcat</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>s2指向的字符串(包括空字符)复制到s1指向的结尾。复制过来的s2覆盖了s1的空字符。返回值为s1。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strncat</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>s2指向的字符串中的前n个字符(包括空字符)复制到s1指向的结尾。复制过来的s2覆盖了s1的空字符。<br>s2字符串中的空字符及其后的任何字符都不会被复制，并且追加一个空字符到所得结果后面。<br>返回值为s1。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">strcmp</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>如果s1字符串在机器编码顺序中落后于s2字符串，函数的返回值是一个正数；如果两个字符串相同，返回值是0;<br>如果第一个字符串在机器编码顺序中先于第二个字符串，返回值是一个负数。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">strncmp</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数作用和strcmp ()一样，只是比较n个字符后或者遇见第一个空字符时会停止比较。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strchr</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">c</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数返回一个指向字符串s中存放字符c的第一个位置的指针(标志结束的空字符是字符串的一部分，因此也可以搜索到它)。<br>如果没有找到该字符，函数就返回空指针。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strpbrk</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数返回一个指针，指向字符串s1中存放s2字符串的任何字符的第一个位置。如果没有找到该字符。如果没找到任何字符，返回空指针。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strrchr</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">s</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">c</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>该函数返回一个指针，指向字符串s中字符c最后一次出现的地方。(标志结束的空字符是字符串的一部分，因此也可以搜索到它)。<br>如果没有找到该字符，函数就返回空指针。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">strstr</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s1</span><span style="COLOR: gray">, </span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s2</span><span style="COLOR: olive">)</span></div>
</div>
<p>该函数返回一个指针，指向s1字符串中第一次出现s2字符串的地方。如果在s1中没找到s2字符串，函数就返回空指针。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">size_t</span><span style="COLOR: gray"> </span><span style="COLOR: blue">strlen</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>返回字符串的长度。</p>
<p>简单应用：<br>在用fgets ()函数时，读取一行输入，这个函数把换行符存储到目标字符串中。<br>我们可以使用strchr ()函数来用一个空字符替换这个换行符。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">line</span><span style="COLOR: gray"> </span><span style="COLOR: olive">[</span><span style="COLOR: maroon">80</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;<br></span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">find</span><span style="COLOR: gray">;<br>&nbsp;<br></span><span style="COLOR: blue">fgets</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">line</span><span style="COLOR: gray">, </span><span style="COLOR: maroon">80</span><span style="COLOR: gray">, </span><span style="COLOR: blue">stdin</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: blue">find</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">strchr</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">line</span><span style="COLOR: gray">, '\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">find</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;*</span><span style="COLOR: blue">find</span><span style="COLOR: gray"> = '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">';<br></span><span style="COLOR: olive">}</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/49009.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-06 15:28 <a href="http://www.cppblog.com/k71983/archive/2008/05/06/49009.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串函数(二)</title><link>http://www.cppblog.com/k71983/archive/2008/05/06/48999.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Tue, 06 May 2008 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/06/48999.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48999.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/06/48999.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48999.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48999.html</trackback:ping><description><![CDATA[<p>字符串函数(二)<br>1.标准库中fgets ()和 fputs ()的实现基本算法</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">// fgets ()函数:从iop指向的文件中最多读取n-1个字符，再加上一个NULL</span><span style="COLOR: gray"><br></span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">fgets</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s</span><span style="COLOR: gray">, </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">n</span><span style="COLOR: gray">, </span><span style="COLOR: blue">FILE</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">iop</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>register</span><span style="COLOR: gray"> </span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">c</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>register</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">cs</span><span style="COLOR: gray">;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">cs</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">s</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">--</span><span style="COLOR: blue">n</span><span style="COLOR: gray"> &gt; </span><span style="COLOR: maroon">0</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: olive">(</span><span style="COLOR: blue">c</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">getc</span><span style="COLOR: olive">(</span><span style="COLOR: blue">iop</span><span style="COLOR: olive">))</span><span style="COLOR: gray"> != </span><span style="COLOR: blue">EOF</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">if</span><span style="COLOR: gray"> </span><span style="COLOR: olive">((</span><span style="COLOR: gray">*</span><span style="COLOR: blue">cs</span><span style="COLOR: gray">++ = </span><span style="COLOR: blue">c</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> == '\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: green">break</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;*</span><span style="COLOR: blue">cs</span><span style="COLOR: gray"> = '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">';<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">c</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">EOF</span><span style="COLOR: gray"> &amp;&amp; </span><span style="COLOR: blue">cs</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">s</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> ? </span><span class=hl-prepro>NULL</span><span style="COLOR: gray"> : </span><span style="COLOR: blue">s</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<br><br>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">// fputs 函数:将字符串s输出到iop指向的文件中</span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">fputs</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">s</span><span style="COLOR: gray">, </span><span style="COLOR: blue">FILE</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">iop</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">c</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">c</span><span style="COLOR: gray"> = *</span><span style="COLOR: blue">s</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: blue">putc</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">c</span><span style="COLOR: gray">, </span><span style="COLOR: blue">iop</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: blue">ferror</span><span style="COLOR: olive">(</span><span style="COLOR: blue">iop</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> ? </span><span style="COLOR: blue">EOF</span><span style="COLOR: gray"> : 非负值;<br></span><span style="COLOR: olive">}</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/48999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-06 14:10 <a href="http://www.cppblog.com/k71983/archive/2008/05/06/48999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串函数(一)</title><link>http://www.cppblog.com/k71983/archive/2008/05/05/48910.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Mon, 05 May 2008 08:58:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/05/48910.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48910.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/05/48910.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48910.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48910.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: (一)字符串输入函数1.gets()函数gets()函数从系统的标准输入设备获得一个字符串，gets()将一直读字符串直到遇到一个换行符\n,按回车可以产生这个字符。#include &lt;stdio.h&gt;#define MAX 81int main (void){&nbsp;&nbsp; &nbsp;char name[MAX];&nbsp; &nbsp; //分配空间&nbsp...&nbsp;&nbsp;<a href='http://www.cppblog.com/k71983/archive/2008/05/05/48910.html'>阅读全文</a><img src ="http://www.cppblog.com/k71983/aggbug/48910.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-05 16:58 <a href="http://www.cppblog.com/k71983/archive/2008/05/05/48910.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串(4)字符串数组</title><link>http://www.cppblog.com/k71983/archive/2008/05/04/48800.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Sun, 04 May 2008 08:25:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/04/48800.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48800.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/04/48800.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48800.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48800.html</trackback:ping><description><![CDATA[<p>字符串数组<br>方法1：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LIM</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">5</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&#8230;&#8230;<br></span><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">mytal</span><span style="COLOR: olive">[</span><span style="COLOR: blue">LIM</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: olive">{</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Adding numbers swiftly</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Multiplying accurately</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Stashing data</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Following instructions to the letter</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">,<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">understanding the C language</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="COLOR: olive">}</span><span style="COLOR: gray">;</span></div>
</div>
<p>因为LIM是5,所以mytal是一个由5个指向char的指针组成的数组。<br>也就是说,mytal是个一维数组。<br>数组里的每一个元素都是一个char类型值的地址。<br>第一个指针是mytal[0],它指向相应字符串的第一个字符。<br>就是说,mytal数组实际上不存放字符串，它只存放字符串的地址(字符串存在程序用来存放常量的那部分内存中)。<br>可以把mytal[0]看做表示第一个字符串,*mytal[0]表示第一个字符串的第一个字符。<br>由于数组符号和指针之间的关系，也可以用mytal[0][0]表示第一个字符串的第一个字符。<br>方法2：<br>建立一个二维数组,如果你确实要修改每一个字符串的值，使用这种方式</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">mytal_2</span><span style="COLOR: olive">[</span><span style="COLOR: blue">lim</span><span style="COLOR: olive">][</span><span style="COLOR: blue">LINLIM</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/48800.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-04 16:25 <a href="http://www.cppblog.com/k71983/archive/2008/05/04/48800.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串(3)字符数组和指针</title><link>http://www.cppblog.com/k71983/archive/2008/05/04/48798.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Sun, 04 May 2008 08:21:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/04/48798.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48798.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/04/48798.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48798.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48798.html</trackback:ping><description><![CDATA[<p>2.字符数组和指针<br>我们可以使用指针符号建立字符串。<br>如：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">about</span><span style="COLOR: olive">[]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">about me!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<p>这个声明和下面声明的作用几乎相同:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">about</span><span style="COLOR: olive">[]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">about me!</span><span style="COLOR: #8b0000">"</span></div>
</div>
<p>那么，这两种方式有什么不同呢？<br>数组形式在计算机中被分配一个有10个元素的数组。每个元素都被初始化为相应的字符。最后那个字符为\0。<br>通常，被引用的字符串存储在可执行文件的数据段部分；<br>当程序被加载到内存中时，字符串也被加载到内存中。被引用的字符串被称为位于静态存储区。<br>但是在程序开始运行后才为数组分配存储空间。这个时候，把被引用的字符串复制到数组中。<br>此后，编译器会把数组名about看作是数组首元素地址&amp;about[0]的同义词。<br>但是，数组形式的about是个地址常量，您不能更改about,因为着意味着更改数组存储的位置(地址)。<br>可以用运算符aoubt+1来标识下一个元素，但是不能使用++about。<br>增量运算符只能用在变量名前，不能用在常量名前。</p>
<p>指针形式*about也在静态区预留10个元素的空间。<br>此外，一旦程序开始执行，还需要为指针变量另外预留一个存储位置。<br>这个变量初始化时指向字符串的第一个字符，但是它的值是可以改变的。<br>因此，可以对它使用增量运算符。例如，++about将指向第二个字符b。</p>
<p>3.数组和指针的差别</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">heart</span><span style="COLOR: olive">[]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">I love cuicui!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;<br></span><span class=hl-types>char</span><span style="COLOR: gray"> *</span><span style="COLOR: blue">head</span><span style="COLOR: olive">[]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">I love cuicui!</span><span style="COLOR: #8b0000">"</span></div>
</div>
<p>主要的差别在于数组名heart是个常量,而指针head则是个变量。<br>首先，两者都可以使用数组符号</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">6</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">heart</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">'\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">6</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">head</span><span style="COLOR: olive">[</span><span style="COLOR: blue">i</span><span style="COLOR: olive">])</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">'\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>其次,两者都可以使用指针加法</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">6</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: olive">(</span><span style="COLOR: blue">heart</span><span style="COLOR: gray"> + </span><span style="COLOR: blue">i</span><span style="COLOR: olive">))</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">'\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">i</span><span style="COLOR: gray"> = </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray"> &lt; </span><span style="COLOR: maroon">6</span><span style="COLOR: gray">; </span><span style="COLOR: blue">i</span><span style="COLOR: gray">++</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: olive">(</span><span style="COLOR: blue">hed</span><span style="COLOR: gray"> + </span><span style="COLOR: blue">i</span><span style="COLOR: olive">))</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">'\</span><span style="COLOR: blue">n</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>但是，只有指针可以使用增量运算符</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: green">while</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: olive">(</span><span style="COLOR: blue">head</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> != '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">'</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">putchar</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: gray">*</span><span style="COLOR: olive">(</span><span style="COLOR: blue">head</span><span style="COLOR: gray">++</span><span style="COLOR: olive">))</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<p>最后，不能使用以下语句</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: #ffa500">//第一种情况</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">heart</span><span style="COLOR: gray"> = </span><span style="COLOR: blue">head</span><span style="COLOR: gray">;&nbsp; </span><span style="COLOR: #ffa500">//非法，常量的值不能改变</span><span style="COLOR: gray"><br></span><span style="COLOR: #ffa500">//第二种情况</span><span style="COLOR: gray"><br></span><span style="COLOR: blue">head</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">1</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = '</span><span style="COLOR: blue">k</span><span style="COLOR: gray">';&nbsp; </span><span style="COLOR: #ffa500">//非法，C的标准不应该允许这样做，但少量编译器混淆了这个概念</span></div>
</div>
<p>为了防止第二种情况发生，建议的做法是在初始化一个指向字符串文字的指针时使用const修饰符:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> * </span><span style="COLOR: blue">p1</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Klingon</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/48798.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-04 16:21 <a href="http://www.cppblog.com/k71983/archive/2008/05/04/48798.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串(2)字符数组及其初始化</title><link>http://www.cppblog.com/k71983/archive/2008/05/04/48795.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Sun, 04 May 2008 08:10:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/04/48795.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48795.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/04/48795.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48795.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48795.html</trackback:ping><description><![CDATA[<p>1.字符数组<br>定义一个字符数组时，您必须让编译器知道它需要多大空间。<br>如:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">msg</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">40</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">show me the money!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<p>const表明这个字符串不可以在程序中改变。<br>这种初始化和下面所示的标准数组初始化相比是很简短的:</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>const</span><span style="COLOR: gray"> </span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">msg</span><span style="COLOR: olive">[]</span><span style="COLOR: gray"> = </span><span style="COLOR: olive">{</span><span style="COLOR: gray">'</span><span style="COLOR: blue">s</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">h</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">o</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">w</span><span style="COLOR: gray">', ' ', <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'</span><span style="COLOR: blue">m</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">e</span><span style="COLOR: gray">', ' ', '</span><span style="COLOR: blue">t</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">h</span><span style="COLOR: gray">',<br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'</span><span style="COLOR: blue">e</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">m</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">o</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">n</span><span style="COLOR: gray">', '</span><span style="COLOR: blue">e</span><span style="COLOR: gray">', <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'</span><span style="COLOR: blue">y</span><span style="COLOR: gray">', '\</span><span style="COLOR: maroon">0</span><span style="COLOR: gray">' <br>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="COLOR: olive">}</span><span style="COLOR: gray">;</span></div>
</div>
<p>注意标志结束的空字符。如果没有它，得到的就只是一个字符数组而不是一个字符串。<br>另外，指定数组大小时，一定要确保数组元素个数比字符串的长度至少多1(多出来的1个元素用来存放空字符)。<br>未被使用的元素均被自动初始化为\0。这里因为是字符数组，所以初始化为char形式的空字符，而不是数字字符0。</p>
<p>如果在进行初始化声明时省略了数组大小，则该大小由编译器来决定。<br>但是请注意，如果并非在初始化时就进行声明，则必须为数组明确的分配大小。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">LINELEN</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">81</span><span style="COLOR: gray"> </span><span style="COLOR: #ffa500">//最大字符串长度 + 1</span><span class=hl-prepro></span><span style="COLOR: gray"><br>&#8230;&#8230;<br></span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">name</span><span style="COLOR: olive">[</span><span style="COLOR: blue">LINELEN</span><span style="COLOR: olive">]</span><span style="COLOR: gray">;</span></div>
</div>
<p>声明一个数组时,数组的大小必须为整型常量，而不是在运行时得到的变量值。<br>和任何数组名一样，字符数组名也是数组首元素的地址。应此下面的式子对数组msg成立。</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">msg</span><span style="COLOR: gray"> == &amp;</span><span style="COLOR: blue">msg</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">0</span><span style="COLOR: olive">]</span><span style="COLOR: gray"><br>*</span><span style="COLOR: blue">msg</span><span style="COLOR: gray"> == '</span><span style="COLOR: blue">s</span><span style="COLOR: gray">'<br>*</span><span style="COLOR: olive">(</span><span style="COLOR: blue">msg</span><span style="COLOR: gray"> + </span><span style="COLOR: maroon">1</span><span style="COLOR: olive">)</span><span style="COLOR: gray"> == </span><span style="COLOR: blue">msg</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">1</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> == '</span><span style="COLOR: blue">h</span><span style="COLOR: gray">'</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/48795.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-04 16:10 <a href="http://www.cppblog.com/k71983/archive/2008/05/04/48795.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>字符串(1)字符串常量</title><link>http://www.cppblog.com/k71983/archive/2008/05/04/48792.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Sun, 04 May 2008 07:59:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/05/04/48792.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/48792.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/05/04/48792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/48792.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/48792.html</trackback:ping><description><![CDATA[<p>在程序中定义字符串<br>一、字符串常量(或者称之为字符串文字)<br>1.介绍<br>字符串常量(string constant),又称为字符串文字(string literal),是指位于一对双引号中的任何字符。<br>双引号中的字符编译器会自动提供结束标志\0字符，作为一个字符串被存放在内存里面。<br>如：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-prepro>#define</span><span style="COLOR: gray"> </span><span style="COLOR: blue">MSG</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">You must have many talents.Tell me some.</span><span style="COLOR: #8b0000">"</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Hi! I'm Clyde the Computer.</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">I have many talents.</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">greeting</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">50</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Hello, and how are you today!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<p>如果字符串文字中间没有间隔或者间隔的是空格符,ANSI C会将其串联起来。<br>例如：</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">greeting</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">50</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Hello, and</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">how are</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">you</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray"> </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">today!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<p>相当于</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-types>char</span><span style="COLOR: gray"> </span><span style="COLOR: blue">greeting</span><span style="COLOR: olive">[</span><span style="COLOR: maroon">50</span><span style="COLOR: olive">]</span><span style="COLOR: gray"> = </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">Hello, and how are you today!</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">;</span></div>
</div>
<p>2.使用双引号<br>如果想在字符串中间使用双引号，可以在双引号的前面加一个反斜线符号。<br>如:</p>
<div class=hl-surround>
<div class=hl-main><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: navy">\</span><span style="COLOR: #8b0000">"</span><span style="COLOR: blue">Run</span><span style="COLOR: gray">, </span><span style="COLOR: blue">Spot</span><span style="COLOR: gray">,</span><span style="COLOR: blue">run</span><span style="COLOR: gray">!\</span><span style="COLOR: #8b0000">"</span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;</span></div>
</div>
<p>3.字符串常量<br>字符串常量属于静态存储(static storage)类。<br>静态存储指的是如果在一个函数中使用字符串常量，即使是多次调用了这个函数,该字符串在程序的整个运行过程中只存储一份。整个引号中的内容作为指向该字符串存储位置的指针。</p>
<div class=hl-surround>
<div class=hl-main><span class=hl-mlcomment>/* quotes.c&nbsp; -- 把字符串看做指针*/</span><span style="COLOR: gray"><br></span><span class=hl-prepro>#include </span><span style="COLOR: #8b0000">&lt;</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">&gt;</span><span class=hl-prepro></span><span style="COLOR: gray"><br></span><span class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">main</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: blue">printf</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">%s, %p, %c </span><span style="COLOR: navy">\</span><span style="COLOR: red">n</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">We</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, </span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">are</span><span style="COLOR: #8b0000">"</span><span style="COLOR: gray">, *</span><span style="COLOR: #8b0000">"</span><span style="COLOR: red">space farers</span><span style="COLOR: #8b0000">"</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>&nbsp;&nbsp; &nbsp;</span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: maroon">0</span><span style="COLOR: gray">;<br></span><span style="COLOR: olive">}</span></div>
</div>
<img src ="http://www.cppblog.com/k71983/aggbug/48792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/k71983/" target="_blank">聂元朗</a> 2008-05-04 15:59 <a href="http://www.cppblog.com/k71983/archive/2008/05/04/48792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>