﻿<?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++博客-朗朗空间</title><link>http://www.cppblog.com/k71983/</link><description>我知道并不是 
所有鸟儿都飞翔 </description><language>zh-cn</language><lastBuildDate>Sun, 19 Apr 2026 12:18:01 GMT</lastBuildDate><pubDate>Sun, 19 Apr 2026 12:18:01 GMT</pubDate><ttl>60</ttl><item><title>搬家了，呵呵 http://www.cnblogs.com/k7_1983/</title><link>http://www.cppblog.com/k71983/archive/2008/09/25/62768.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Thu, 25 Sep 2008 08:35:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/09/25/62768.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/62768.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/09/25/62768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/62768.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/62768.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #000000">http:</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">www.cnblogs.com/k7_1983/</span></div>
博客园有小组，更好交流！^_^
<img src ="http://www.cppblog.com/k71983/aggbug/62768.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-09-25 16:35 <a href="http://www.cppblog.com/k71983/archive/2008/09/25/62768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>翻译-C++最简单的windows程序 The Simplest Windows Program</title><link>http://www.cppblog.com/k71983/archive/2008/09/23/62560.html</link><dc:creator>聂元朗</dc:creator><author>聂元朗</author><pubDate>Tue, 23 Sep 2008 03:01:00 GMT</pubDate><guid>http://www.cppblog.com/k71983/archive/2008/09/23/62560.html</guid><wfw:comment>http://www.cppblog.com/k71983/comments/62560.html</wfw:comment><comments>http://www.cppblog.com/k71983/archive/2008/09/23/62560.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cppblog.com/k71983/comments/commentRss/62560.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/k71983/services/trackbacks/62560.html</trackback:ping><description><![CDATA[<div class="article">
来自：http://www.relisoft.com/win32/winnie.html<br/>
译：聂元朗 <br/>
1. The Simplest Windows Program<br/>
1.最简单的Windows程序<br/>
<br/>
Before you can even begin thinking about programming in Windows, you have to be able to understand how this simple program works. 
<br/><br/>
在你开始想如何在windows下编程之前，你必须要弄清楚下面这个简单windows程序的工作原理。
<br/><br/>
Windows API calls are highlighted in blue and Windows specific data types are shown in green. I will also usually put a double colon in front of API calls. In C++, that simply means that I'm calling a global function, in case there is some ambiguity.
<br/><br/>
我用蓝色来标识Windows的API调用，用绿色来标识Windows中的特殊的数据类型。同时我在API函数的前面放置了一对冒号::。在C++中，这对冒号就是告诉编译器我在调用一个全局函数。由于有时候有同名的函数，为了不引起混淆，在前面放置冒号是一种很好的做法
<br/><br/>
Sources (zipped file 4k) are right here. Remember to compile them as a Windows application. For instance, in Visual C++ select File.New.Projects.Win32 Application. Otherwise you'll get the error: unresolved external _main. (I provided project file Winnie.dsp for those of you who use MS VC++ 6.0 and Winnie.sln for the users of VC++ 7.0)
<br/><br/>
我提供了源代码(一个4k大小的压缩文件)。请记住要把它们编译成一个windows应用程序而不是windows控制台程序。否则，你就会得到找不到main函数的错误。在VC++6.0中，我们可以通过选择File——New Projects——Win32 Application来创建一个windows应用程序的工程。当然，你用不着这么担心，我已经提供了两个做好的工程文件给你。一个是winnie.dsp，你可以在VC++6.0下使用。一个是Winnie.sln，你可以在VC++7.0下使用。
<br/><br/>
First, in a Windows program, you have to define a Window Class, the "class" of window(s) that will be displayed by your application (not a C++ class). In our case we will display only one window, but still, we need to give Windows some minimal information about its Class. The most important part of the WinClass (now, that's a C++ class that describes the Window Class) is the address of the callback procedure, or the Window Procedure. Windows is supposed to call us--Windows sends messages to our program by calling this procedure.
<br/><br/>
好了，让我们来看看如何写这个最简单的程序吧。首先，在一个windows程序里面，你需要定义一个窗口类，注意这个类的概念不同于C++中的类，这个窗口类相当于C语言中的结构体，你把这个结构体填好了，然后你的应用程序就会根据你填的这些信息来显示窗口。在我们的例子里面，我们仅仅显示一个窗口。但是就算是这样，我们也必须要给我们的窗口最少的窗口类信息。而其中最重要的部分就是回调函数了，有时候我们也称它为窗口过程。其实这是一个函数指针，每次程序需要处理消息的时候，windows就通过这个函数指针来调用我们写好的回调函数。是的，你看到，是windows调用我们编写的函数。你还记得函数指针吗？如果不是很清楚，可以google一下，o(&#8745;_&#8745;)o&#8230;
<br/><br/>
Notice the declaration of WindowProcedure. Windows calls it with a handle to the window in question, the message, and two data items associated with the message, the paramters, WPARAM and LPARAM.
<br/><br/>
让我们看看WindowProcedure(窗口过程、回调函数)的定义。仔细看一下，第一个函数是一个句柄，也就是个整数。Windows用它来区别是哪个窗口。然后是消息，然后是与消息关系密切的两个参数WPARAM和LPARAM。这个我本来想讲一下，留到以后吧，毕竟原文中在这里没有讲。
<br/><br/>
In WinClass we also have to specify things like the program instance handle HINSTANCE, the mouse cursor (we just load the standard arrow cursor), the brush to paint the window's background (we chose the default window color brush), and the symbolic name of our class (you don't have to understand the meaning of all those yet).
<br/><br/>
在下面的WinClass类中我们必须给一些窗口类的字段赋值，如窗口的实例句柄HINSTACE,鼠标光标(我们仅仅加载了标准的箭头鼠标)，画窗口背景的画刷(我们用的是窗口缺省的背景颜色画刷)，最后还有窗口类的名字(窗口类的名字最好和别人的不同).(当然，现在你不需要弄明白这些参数的意义)
<br/><br/>
Once all the fields of WNDCLASS are filled, we register the class with the Windows system.
<br/><br/>
一旦我们把WNDCLASS结构体填完了，我们就通过调用RegisterClass函数在windows系统中注册我们的窗口类。好了，先看看我是怎样封装WNDCLASS到一个WinClass类中去的。 
<br/><br/>
<pre class="program">
#include &lt;windows.h&gt;
LRESULT CALLBACK WindowProcedure
    (HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam);
class WinClass
{
public:
    WinClass (WNDPROC winProc, char const * className, HINSTANCE hInst);
    void Register ()
    {
        ::RegisterClass (&_class);//now we don&#8217;t deal with the error
    }//we will process the error in the next version
private:
    WNDCLASS _class;//define a private WNDCLASS object member
};

WinClass::WinClass
    (WNDPROC winProc, char const * className, HINSTANCE hInst)
{
    _class.style = 0;
    _class.lpfnWndProc = winProc; // window procedure: mandatory
    _class.cbClsExtra = 0;
    _class.cbWndExtra = 0;
    _class.hInstance = hInst;         // owner of the class: mandatory
    _class.hIcon = 0;
    _class.hCursor = ::LoadCursor (0, IDC_ARROW); // optional
    _class.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // optional
    _class.lpszMenuName = 0;
    _class.lpszClassName = className; // mandatory
}
</pre>
Once the Window Class is registered, we can proceed with the creation of a window. This is done by calling the CreateWindow API. It takes a lot of arguments: the name of the window class that we have just registered, the caption that will appear in the title bar, window style, position, size, and the application instance. The rest of the arguments, for the time being, will be left equal to zero. 
<br/><br/>
一旦窗口类注册成功，我们就可以用它来创建一个窗口。我们通过调用CreateWindow这个API函数来完成它。它有很多参数，这可能让你有点烦，不过不要进，你只要写一次就好了。这些参数包括：我们刚刚注册好的窗口类的名字(这个要是搞错了，你的窗口可能就出不来了),我们窗口的标题栏上的标题，窗口的样式，位置，大小还有应用程序的实例句柄。剩下的参数暂时我们还不需要用到，我们把它们初始化为0。
<br/><br/>
This part of the program can also be encapsulated into a C++ class, WinMaker.
<br/><br/>
程序的这部分也被我封装到了一个C++的类WinMaker当中。
<br/><br/>
The window will not appear on the screen until you tell Windows to show it.
<br/><br/>
就算你创建好了窗口，但你还是看不到，你必须调用ShowWindow函数让它显示。
<pre class="program">
class WinMaker
{
public:
    WinMaker (): _hwnd (0) {}
    WinMaker (char const * caption, 
              char const * className,
              HINSTANCE hInstance);
    void Show (int cmdShow)
    {
        ::ShowWindow (_hwnd, cmdShow);
        ::UpdateWindow (_hwnd);
    }
protected:
    HWND _hwnd;
};
WinMaker::WinMaker (char const * caption, 
                    char const * className,
                    HINSTANCE hInstance)
{
    _hwnd = ::CreateWindow (
        className,            // name of a registered window class
        caption,              // window caption
        WS_OVERLAPPEDWINDOW,  // window style
        CW_USEDEFAULT,        // x position
        CW_USEDEFAULT,        // y position
        CW_USEDEFAULT,        // witdh
        CW_USEDEFAULT,        // height
        0,                    // handle to parent window
        0,                    // handle to menu
        hInstance,            // application instance
        0);                   // window creation data
}
</pre>
A Windows program is event-driven. It means that you, as a programmer, are supposed to be on the defensive. The user will bombard Windows with various input actions, and Windows will bombard your program with messages corresponding to these actions. All you have to do is to respond to these messages. The picture below shows schematically how it works.
<br/><br/>
Windows程序是事件驱动的。这就是说你作为一个windows程序员，所做的应该是防御式编程。其实也没有这么严重。具体来说就是，用户会发给windows多种输入行为，而windows把这些输入用消息的方式发给你的程序。而你，所做的就是针对每一个消息在回调函数中做出处理。下面的这张图示意性的说明了这个过程。图在下一页的下一页，o(&#8745;_&#8745;)o&#8230;
<br/><br/>
Windows gets various events from the keyboard, the mouse, the ports, etc. Each event is quickly converted into a message. Windows (the operating system) dispatches messages to appropriate windows. For instance, all keyboard messages go to the window that currently has the input focus (the active window). Mouse messages are dispatched according to the position of the mouse cursor. They usually go to the window that is directly under the cursor (unless some program captured the mouse).
<br/><br/>
首先,windows系统从键盘、鼠标、端口等等各种设备中获得各种事件。每个事件被快速的转换为消息。Windows分派这些消息给合适的窗口。举个例子，所有的键盘消息都会传给当前具有输入焦点的窗口(也就是所谓的活动窗口)。鼠标消息则会根据鼠标光标所在的位置分派给相应的窗口。这些窗口通常是直接位于光标下的第一个窗口(除非有某些程序捕获鼠标消息)。
<br/><br/>
All these messages end up in message queues. Windows keeps a message queue for every running application (actually, for every thread). It is your duty to retrieve these messages one-by-one in what is called a message loop. Your program has to call GetMessage to retrieve a message. Then you call DispatchMessage to give it back to Windows. Couldn't Windows just go ahead and dispatch all these messages itself? In principle it could, but a message loop gives your program a chance to have a peek at them and maybe perform some additional actions before dispatching them. Or not...
<br/><br/>
所有的消息都放在消息队列里面。Windows为每一个运行的应用程序维护一个消息队列(实际上，是为每一个线程)。把这些消息一个个的取出来，这是你的责任。通常我们把这段代码叫做消息循环。在你的程序里，首先调用GetMessage函数取出一条消息，然后调用DispatchMessage把它返回给Windows。Windows还会重新分派这些消息吗?原则上不会，但是你可以在消息循环中使用PeekMessage函数来查看消息而不分派它，因为某些情况下，你需要在分派这些消息之前做一些额外的工作。
<br/><br/>
Each message is addressed to a particular window. When you tell Windows to dispatch such a message, it will figure out the class of this window, find the associated Window Procedure, and call it. Every single message sent to our window will end up in our window procedure. It is now up to us to respond to it. So, do we have to respond appropriately to every possible type of Windows message? There a hundreds of them! Fortunately, no! We only need to intercept those messages that we are interested in. Everything else we pass back to Windows for default processing using DefWindowProc.
<br/><br/>
每个消息被传递到一个特殊的窗口。当你告诉windows分派一条信息的时候，windows会先找出这个窗口的类，然后找到与之关联的窗口过程，最后调用这个窗口过程。每个发送到我们窗口的消息都会在我们的窗口过程中终止。现在轮到我们来处理这些消息了。因此，我们必须要处理所有的消息类型？不，这里有几百种消息，我们只需要处理对我们有用的消息就可以了。但其它消息怎么办呢？不用担心，其它消息我们通过调用DefWindowProc这个函数来自动处理。
<br/><br/>
Let's have a look at WinMain. The execution of a Windows program doesn't start in main--it starts in WinMain. In our WinMain, we create a WinClass and register it. Then we create an actual window (of the class we've just registered) and show it. Actually, WinMain is called with the appropriate show directive--the user might want to start the application minimized or maximized. So we just follow this directive. Next, we enter the message loop and keep retrieving and dispatching messages until GetMessage returns 0. At that point the message's wParam will contain the return code of the whole program.
<br/><br/>
让我们看看WinMain这个函数。一个windows函数的开始不是main函数，而是WinMain。在我们的winMain函数里，我们创建了一个WinClass的对象winClass，然后我们在windows中注册了它。接下来我们创建了一个窗口(我们刚刚注册的窗口类所对应的窗口)并且显示它。实际上，WinMain由一个参数是用来指明窗口显示效果的(这样，用户可以指定窗口显示的方式)——用户可能希望打开这个程序用最小化或者最大化的方式打开，因此，我们在这里只需要直接使用这个参数就可以了。然后我们进入消息循环并不断取出消息和进行分派，直到GetMessage函数返回0。这个时候消息的wParam参数将会包含整个程序的返回值。
<pre class="program">
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
                    char * cmdParam, int cmdShow)
{
    char className [] = "Winnie";
    WinClass winClass (WindowProcedure, className, hInst);
    winClass.Register ();
    WinMaker win ("Hello Windows!", className, hInst);
    win.Show (cmdShow);
    <div class="code">
    MSG  msg;
    int status;
    while ((status = ::GetMessage (& msg, 0, 0, 0)) != 0)
    {
        if (status == -1)
            return -1;
        ::DispatchMessage (& msg);
    }
    </div>
    return msg.wParam;
}
</pre>
The GetMessage API is an interesting example of the bizarre Microsoft Troolean (as opposed to traditional, Boolean) logic. GetMessage is defined to return a BOOL, but the documentation specifies three types of returns, non-zero, zero and -1. I am not making it up! Here's an excerpt from the help file:
<br/><br/>
GetMessage函数是一个很好笑的微软的三值布尔类型的例子。GetMessage函数定义的返回值是BOOL类型，但是文档却明确指出它含有三种返回值，非0、0和-1。我不想在这里多费口舌。下面是从MSDN中的摘录。
<br/><br/>
&#183; If the function retrieves a message other than WM_QUIT, the return value is nonzero. <br/>
&#183; If the function retrieves the WM_QUIT message, the return value is zero. <br/>
&#183; If there is an error, the return value is -1. <br/>
<br/><br/>
The other important part of every Windows program is the Windows Procedure. Remember, Windows will call it with all kinds of messages. All these messages can be ignored by sending them to DefWindowProc. There is only one message that we must intercept. That's the WM_DESTROY message that is sent by Windows when the user decides to close the window (by pressing the close button in the title bar). The standard response to WM_DESTROY is to post the quit message and return zero. That's all there is to it.
<br/><br/>
让我们看看所有windows程序都很重要的回调函数吧。你需要注意的是，windows将为所有的消息调用这个函数。所以剩余的消息一定要送给DefWindowProc去处理。在这里我们只处理了一个消息。那就是WM_DESTROY。当用户要关闭一个窗口的时候，windows会发送这个消息。标准的处理WM_DESTROY消息是发送一条退出消息，并返回0。好了，这就是我们要讲的全部了。*_*
<br/><br/>
<pre class="program">
// Window Procedure called by Windows
LRESULT CALLBACK WindowProcedure
    (HWND hwnd, unsigned int message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_DESTROY:
            ::PostQuitMessage (0);
            return 0;
    }
    return ::DefWindowProc (hwnd, message, wParam, lParam );
}
</pre>
</div><img src ="http://www.cppblog.com/k71983/aggbug/62560.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-09-23 11:01 <a href="http://www.cppblog.com/k71983/archive/2008/09/23/62560.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><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>1</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></channel></rss>