??xml version="1.0" encoding="utf-8" standalone="yes"?>日产精品久久久一区二区,色偷偷久久一区二区三区,91精品国产色综合久久http://www.shnenglu.com/k71983/我知道ƈ不是 所有鸟儉K飞翔 zh-cnSat, 28 Jun 2025 12:30:58 GMTSat, 28 Jun 2025 12:30:58 GMT60搬家了,呵呵 http://www.cnblogs.com/k7_1983/http://www.shnenglu.com/k71983/archive/2008/09/25/62768.html聂元?/dc:creator>聂元?/author>Thu, 25 Sep 2008 08:35:00 GMThttp://www.shnenglu.com/k71983/archive/2008/09/25/62768.htmlhttp://www.shnenglu.com/k71983/comments/62768.htmlhttp://www.shnenglu.com/k71983/archive/2008/09/25/62768.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/62768.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/62768.htmlhttp://www.cnblogs.com/k7_1983/ 博客园有组Q更好交!^_^

]]>
译-C++最单的windowsE序 The Simplest Windows Programhttp://www.shnenglu.com/k71983/archive/2008/09/23/62560.html聂元?/dc:creator>聂元?/author>Tue, 23 Sep 2008 03:01:00 GMThttp://www.shnenglu.com/k71983/archive/2008/09/23/62560.htmlhttp://www.shnenglu.com/k71983/comments/62560.htmlhttp://www.shnenglu.com/k71983/archive/2008/09/23/62560.html#Feedback4http://www.shnenglu.com/k71983/comments/commentRss/62560.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/62560.html 来自Qhttp://www.relisoft.com/win32/winnie.html
译:(x)聂元?
1. The Simplest Windows Program
1.最单的WindowsE序

Before you can even begin thinking about programming in Windows, you have to be able to understand how this simple program works.

在你开始想如何在windows下编E之前,你必要弄清楚下面这个简单windowsE序的工作原理?

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.

我用蓝色来标识Windows的API调用Q用l色来标识Windows中的Ҏ(gu)的数据类型。同时我在API函数的前面放|了一对冒?:。在C++中,q对冒号是告诉~译器我在调用一个全局函数。由于有时候有同名的函敎ͼZ不引h؜淆,在前面放|冒h一U很好的做法

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)

我提供了源代?一?k大小的压~文?。请C要把它们~译成一个windows应用E序而不是windows控制台程序。否则,你就?x)得到找不到main函数的错误。在VC++6.0中,我们可以通过选择File——New Projects——Win32 Application来创Z个windows应用E序的工E。当Ӟ你用不着q么担心Q我已经提供了两个做好的工程文gl你。一个是winnie.dspQ你可以在VC++6.0下用。一个是Winnie.slnQ你可以在VC++7.0下用?

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.

好了Q让我们来看看如何写q个最单的E序吧。首先,在一个windowsE序里面Q你需要定义一个窗口类Q注意这个类的概念不同于C++中的c,q个H口cȝ当于C语言中的l构体,你把q个l构体填好了Q然后你的应用程序就?x)根据你填的q些信息来显C窗口。在我们的例子里面,我们仅仅昄一个窗口。但是就是q样Q我们也必须要给我们的窗口最的H口cM息。而其中最重要的部分就是回调函CQ有时候我们也U它为窗口过E。其实这是一个函数指针,每次E序需要处理消息的时候,windows通过q个函数指针来调用我们写好的回调函数。是的,你看刎ͼ是windows调用我们~写的函数。你q记得函数指针吗Q如果不是很清楚Q可以google一下,o(∩_∩)o…

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.

让我们看看WindowProcedure(H口q程、回调函?的定义。仔l看一下,W一个函数是一个句柄,也就是个整数。Windows用它来区别是哪个H口。然后是消息Q然后是与消息关pd切的两个参数WPARAM和LPARAM。这个我本来惌一下,留到以后吧,毕竟原文中在q里没有讌Ӏ?

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).

在下面的WinClasscM我们必须l一些窗口类的字D赋|如窗口的实例句柄HINSTACE,鼠标光标(我们仅仅加蝲了标准的头鼠标)Q画H口背景的画?我们用的是窗口缺省的背景颜色d)Q最后还有窗口类的名?H口cȝ名字最好和别h的不?.(当然Q现在你不需要弄明白q些参数的意?

Once all the fields of WNDCLASS are filled, we register the class with the Windows system.

一旦我们把WNDCLASSl构体填完了Q我们就通过调用RegisterClass函数在windowspȝ中注册我们的H口cR好了,先看看我是怎样装WNDCLASSC个WinClasscMȝ?

#include <windows.h>
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’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
}
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.

一旦窗口类注册成功Q我们就可以用它来创Z个窗口。我们通过调用CreateWindowq个API函数来完成它。它有很多参敎ͼq可能让你有点烦Q不q不要进Q你只要写一ơ就好了。这些参数包括:(x)我们刚刚注册好的H口cȝ名字(q个要是搞错了,你的H口可能出不来?,我们H口的标题栏上的标题Q窗口的样式Q位|,大小q有应用E序的实例句柄。剩下的参数暂时我们q不需要用刎ͼ我们把它们初始化??

This part of the program can also be encapsulated into a C++ class, WinMaker.

E序的这部分也被我封装到了一个C++的类WinMaker当中?

The window will not appear on the screen until you tell Windows to show it.

q你创建好了窗口,但你q是看不刎ͼ你必调用ShowWindow函数让它昄?
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
}
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.

WindowsE序是事仉动的。这是说你作ؓ(f)一个windowsE序员,所做的应该是防御式~程。其实也没有q么严重。具体来说就是,用户?x)发lwindows多种输入行ؓ(f)Q而windows把这些输入用消息的方式发l你的程序。而你Q所做的是针对每一个消息在回调函数中做出处理。下面的q张囄意性的说明了这个过E。图在下一늚下一,o(∩_∩)o…

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).

首先,windowspȝ从键盘、鼠标、端口等{各U设备中获得各种事g。每个事件被快速的转换为消息。Windows分派q些消息l合适的H口。D个例子,所有的键盘消息都会(x)传给当前h输入焦点的窗?也就是所谓的zdH口)。鼠标消息则?x)根据鼠标光标所在的位置分派l相应的H口。这些窗口通常是直接位于光标下的第一个窗?除非有某些程序捕获鼠标消??

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...

所有的消息都放在消息队列里面。Windows为每一个运行的应用E序l护一个消息队?实际上,是ؓ(f)每一个线E?。把q些消息一个个的取出来Q这是你的责仅R通常我们把这D代码叫做消息@环。在你的E序里,首先调用GetMessage函数取出一条消息,然后调用DispatchMessage把它q回lWindows。Windowsq会(x)重新分派q些消息?原则上不?x),但是你可以在消息循环中用PeekMessage函数来查看消息而不分派它,因ؓ(f)某些情况下,你需要在分派q些消息之前做一些额外的工作?

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.

每个消息被传递到一个特D的H口。当你告诉windows分派一条信息的时候,windows?x)先扑ևq个H口的类Q然后找C之关联的H口q程Q最后调用这个窗口过E。每个发送到我们H口的消息都?x)在我们的窗口过E中l止。现在轮到我们来处理q些消息了。因此,我们必须要处理所有的消息cdQ不Q这里有几百U消息,我们只需要处理对我们有用的消息就可以了。但其它消息怎么办呢Q不用担心,其它消息我们通过调用DefWindowProcq个函数来自动处理?

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.

让我们看看WinMainq个函数。一个windows函数的开始不是main函数Q而是WinMain。在我们的winMain函数里,我们创徏了一个WinClass的对象winClassQ然后我们在windows中注册了它。接下来我们创徏了一个窗?我们刚刚注册的窗口类所对应的窗?q且昄它。实际上QW(xu)inMain׃个参数是用来指明H口昄效果?q样Q用户可以指定窗口显C的方式)——用户可能希望打开q个E序用最化或者最大化的方式打开Q因此,我们在这里只需要直接用这个参数就可以了。然后我们进入消息@环ƈ不断取出消息和进行分z,直到GetMessage函数q回0。这个时候消息的wParam参数会(x)包含整个E序的返回倹{?
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);
    
MSG msg; int status; while ((status = ::GetMessage (& msg, 0, 0, 0)) != 0) { if (status == -1) return -1; ::DispatchMessage (& msg); }
return msg.wParam; }
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:

GetMessage函数是一个很好笑的微软的三值布?yu)(dng)类型的例子。GetMessage函数定义的返回值是BOOLcdQ但是文档却明确指出它含有三U返回|???1。我不想在这里多费口舌。下面是从MSDN中的摘录?

· If the function retrieves a message other than WM_QUIT, the return value is nonzero.
· If the function retrieves the WM_QUIT message, the return value is zero.
· If there is an error, the return value is -1.


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.

让我们看看所有windowsE序都很重要的回调函数吧。你需要注意的是,windowsؓ(f)所有的消息调用q个函数。所以剩余的消息一定要送给DefWindowProcd理。在q里我们只处理了一个消息。那是WM_DESTROY。当用户要关闭一个窗口的时候,windows?x)发送这个消息。标准的处理WM_DESTROY消息是发送一条退出消息,q返?。好了,q就是我们要讲的全部了?_*

// 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 );
}


]]>
书上的练?随机?龟兔赛跑http://www.shnenglu.com/k71983/archive/2008/05/25/51026.html聂元?/dc:creator>聂元?/author>Sun, 25 May 2008 05:56:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/25/51026.htmlhttp://www.shnenglu.com/k71983/comments/51026.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/25/51026.html#Feedback1http://www.shnenglu.com/k71983/comments/commentRss/51026.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/51026.html书上的一个练?fn)?br>

// date 2008.5.25
// author fanghua.nie
// just do a exercise in the C How To Program
 
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define START_POS 1
#define RACE_DISTANCE  70  // the distances of the race
 
#define TORTOISE 'T'    // the symbol that is printed  in the screen as a tortoise
#define RABBIT 'R'      // the symbol that is printed in the screen as a rabbit
#define ROAD '.'        // the symbol that is printed in the screen as a mile road.
#define COMPLETE_ROAD '+'
 
// define the console color
#define LIGHT_GREEN FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define LIGHT_YELLOW FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY
#define LIGHT_RED FOREGROUND_RED | FOREGROUND_INTENSITY
// define BOOL datatype
typedef int BOOL;
#define TRUE 1   
#define FALSE 0
 
 
 
//get the speed of the tortoise or the rabbit
int GetTortoiseSpeed ( int percent, int * speed );
int GetRabbitSpeed ( int percent, int * speed );
 
//output the result in console interface
void PrintRaceResult ( int tortoisePosition, int rabbitPosition );
 
int main (void)
{
    
int percent; // save the percent as a integer that less 10
                
// 1  10%,   2 20%, 9 90%, 10 100% etc.
    
int speed; // save the speed of the rabbit or the tortoise
    
    
int tortoisePosition = START_POS;
    
int rabbitPosition = START_POS;
 
    
srand ( time(NULL) );
 
    
printf ("     The game began:\n");
    
//show the tortoise and the rabbit
    
PrintRaceResult ( tortoisePosition, rabbitPosition );
 
    
while ( rabbitPosition < RACE_DISTANCE && tortoisePosition < RACE_DISTANCE )
    
{
        
//compute next speed of the tortoise
        
percent = rand()%10 + 1;
 
        
if ( !GetTortoiseSpeed ( percent, &speed ) ) //get the speed of the tortoise
        
{
            
puts ("Error!\n");
            
exit (ERROR);
        
}
        
        
// move the tortoise to next position
        
tortoisePosition = tortoisePosition + speed;
 
        
if ( tortoisePosition < 0 )
            
tortoisePosition = START_POS;
        
else if ( tortoisePosition > RACE_DISTANCE )
            
tortoisePosition = RACE_DISTANCE;
        
        
//compute next rate of rabbit speed
        
percent = rand()%10 + 1; //get the percent
 
        
if ( !GetRabbitSpeed (percent, &speed) ) //get the speed of rabbit
        
{
            
puts ("Error!\n");
            
exit (ERROR);
        
}
        
        
//move the rabbit
        
rabbitPosition = rabbitPosition + speed;
        
        
//check the position whether is right or not, then correct it.
        
if ( rabbitPosition < 0 )
            
rabbitPosition = START_POS;
        
else if ( rabbitPosition > RACE_DISTANCE )
            
rabbitPosition = RACE_DISTANCE;
        
        
//show the tortoise and the rabbit
        
PrintRaceResult ( tortoisePosition, rabbitPosition );
 
    
}
    
    
//print the race result
    
if ( rabbitPosition > tortoisePosition )
    
{
        
printf ("Rabbit Wins!\n");
    
}
    
else if ( rabbitPosition == tortoisePosition )
    
{
        
printf ("It's a tie\n");
    
}
    
else
    
{
        
printf ("Tortoise Wins!\n");
    
}
 
    
return 0;
}
 
BOOL GetTortoiseSpeed ( int percent, int * speed )
{
    
if ( percent >= 1 && percent <= 5 )
    
{
        
(*speed) = 3;
        
return TRUE;
    
}
    
else if ( percent >= 6 && percent <= 7 )
    
{
        
(*speed) = -6;
        
return TRUE;
    
}
    
else if ( percent >= 8 && percent <= 10 )
    
{
        
(*speed) = 1;
        
return TRUE;
    
}
    
else
    
{
        
return FALSE;
    
}
}
 
BOOL GetRabbitSpeed ( int percent, int * speed )
{
    
if ( percent >= 1 && percent <= 2 )
    
{
        
(*speed) = 0;
        
return TRUE;
    
}
    
else if ( percent >= 3 && percent <= 4 )
    
{
        
(*speed) = 9;
        
return TRUE;
    
}
    
else if ( percent == 5 )
    
{
        
(*speed) = -12;
        
return TRUE;
    
}
    
else if ( percent >= 6 && percent <= 8 )
    
{
        
(*speed) = 1;
        
return TRUE;
    
}
    
else if ( percent >= 9 && percent <= 10 )
    
{
        
(*speed) = -2;
        
return TRUE;
    
}
    
else
    
{
        
return FALSE;
    
}
}
 
void PrintRaceResult ( int tortoisePosition, int rabbitPosition )
{
    
int tcount;
    
int rcount;
 
    
HANDLE hOut;
    
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    
printf ("\n     ");
    
for ( tcount = START_POS; tcount <= RACE_DISTANCE; tcount++ )
    
{
 
        
if ( tcount == tortoisePosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (TORTOISE);
        
}
        
else if ( tcount < tortoisePosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (COMPLETE_ROAD);
        
}
        
else
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_RED );
            
putchar (ROAD);
        
}
    
}
    
printf ("\n     ");
 
    
for ( rcount = START_POS; rcount <= RACE_DISTANCE; rcount++ )
    
{
        
if ( rcount == rabbitPosition )
        
{
            
SetConsoleTextAttribute ( hOut, LIGHT_GREEN );
            
putchar (RABBIT);
        
}
        
else if ( rcount < rabbitPosition )
        
{
            
SetConsoleTextAttribute (hOut, LIGHT_GREEN );
            
putchar (COMPLETE_ROAD);
        
}
        
else
        
{
            
SetConsoleTextAttribute ( hOut, LIGHT_YELLOW );
            
putchar (ROAD);
        
}
    
}
    
printf ("\n\n");
 
}


]]>
l典windows sdk E序设计|站 ——有好站׃(x)更新Q免得到处去?/title><link>http://www.shnenglu.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.shnenglu.com/k71983/archive/2008/05/22/50777.html</guid><wfw:comment>http://www.shnenglu.com/k71983/comments/50777.html</wfw:comment><comments>http://www.shnenglu.com/k71983/archive/2008/05/22/50777.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/k71983/comments/commentRss/50777.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/k71983/services/trackbacks/50777.html</trackback:ping><description><![CDATA[<a >http://www.winprog.org/tutorial/</a><br>个h最喜欢的SDK入门教程 使用C<br><br><a >http://www.relisoft.com/win32/index.htm</a><br>较喜Ƣ的Q用C++<br><br><a >http://adrianxw.dk/</a>   <br>一些关于windows下的console斚w的SDK函数调用<br><br><a >http://www.functionx.com/win32/</a> <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 >http://www.mdstud.chalmers.se/~md7amag/code/wintut/</a><br>q个不是太好Q不q看看也不错<br><br>http://www.vckbase.com<br>很多源代码和文本资料Q文档,<br><br><a >http://www.<font color=#0000ff>c</font>sdn.net</a><br>q个不用说了Q问问题的好地方<br><br><a >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>各种图表资源索引,Zq接从攑ֈq里了,免得q要点击链接Q?br><br> <p>4 free icons of iPhone, designed in scribbled style. </p> <p><a ><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>  By: <a rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p> <p>  Icons in package: 4 </p> <p>  </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Web 2 - Social Bookmark Icons</font></strong></a></p> <p>12 freeware “iPhone-like” icons of Web 2 Social Bookmarks for use in blogs, websites, desktops, softwares.</p> <p><a ><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>   By: <a rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a></p> <p>  Icons in package: 12 </p> <p>  </p> <p>  </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>iPod Shuffle Icons</font></strong></a></p> <p><a ><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>  By: <a rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p> <p>  Icons in package: 2 </p> <p>  </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>3D RSS Feeds Icon</font></strong></a> </p> <p><a ><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>  By:<a rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p> <p>  Icons in package: 1</p> <p>  </p> <p>  </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Circle Feeds Icons</font></strong></a> </p> <p><a ><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>  By:<a rel=nofollow target=_blank><font color=#006699>Dirceu Veiga</font></a> </p> <p>  Icons in package: 4</p> <p>  </p> <p>  </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Smiley DevKit</font></strong></a> </p> <p><a ><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 rel=nofollow target=_blank><font color=#006699>bartelmedesign</font></a></p> <p> </p> <p>  </p> <p> </p> <p>  </p> <p>  </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Flag Button Devkit</font></strong></a> </p> <p><a ><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>  By: <a rel=nofollow target=_blank><font color=#006699>bartelmedesign</font></a></p> <p>   </p> <p> </p> <p> </p> <p> </p> <p><a 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…etc.. </p> <p><a ><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 rel=nofollow target=_blank><font color=#006699>yellowicon team</font></a></p> <p>  </p> <p>  </p> <p>  </p> <p> </p> <p><a 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 ><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>  Icons in package: 12 </p> <p>  Icons size: 256×256 </p> <p>  Icons formats: PNG, ICO </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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 ><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>  By: <a rel=nofollow target=_blank><font color=#006699>yichi</font></a> </p> <p>  </p> <p>  </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Mac OS Boxes</font></strong></a> </p> <p><a ><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>  By: <a rel=nofollow target=_blank><font color=#006699>Alejandro Lopez</font></a> </p> <p>  Icons in package: 6 </p> <p>  </p> <p> </p> <p><a 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 ><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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>Iconshock’s Icon Sets</font></strong></a> </p> <p>There are many cartoon and film icons in the website include Transormers, Finding Nemo, Dragon Ball…  </p> <p><a ><img style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" border=0 alt="Iconshock’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>  </p> <p>  </p> <p>  </p> <p>  </p> <p> </p> <p><a 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’s applications’ boxes </p> <p><a ><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>  By: Pedro de la Luna </p> <p>  Icons in package: 9 </p> <p> </p> <p>  </p> <p> </p> <p><a 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 ><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>  Icons in package: 9</p> <p>  </p> <p>  </p> <p> </p> <p><a 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 ><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>  </p> <p>  </p> <p>  </p> <p>  </p> <p>  </p> <p> </p> <p><strong>  </strong><a rel=nofollow target=_blank><strong><font color=#006699>Aqua Neue (Graphite)</font></strong></a> </p> <p><a ><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>  By: Pedro de la Luna </p> <p>  Icons in package: 86 </p> <p> </p> <p> </p> <h5><a rel=nofollow target=_blank><font color=#006699>Feedicons 2</font></a></h5> <p><a ><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>  By: Kuswanto </p> <p>  Download: </p> <p>  </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>104 Standard PC Keyboard Key Icons</font></strong></a> </p> <p><a ><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>  By: <a rel=nofollow target=_blank><font color=#006699>Alan Who</font></a> </p> <p>  Icons in package: 104 </p> <p>  Download: </p> <p>  </p> <p> </p> <p> </p> <p> </p> <p><a 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 ><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> </p> <p>  </p> <p>  </p> <p>  </p> <p>  </p> <p> </p> <p><a 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.  </p> <p><a ><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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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×256 PNG icons for Windows Vista</p> <p><a ><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>  </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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 ><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>  </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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…</p> <p><a ><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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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’re kinda like baseball cards, only without the steroids. And you can use them on your website.</p> <p><a ><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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>iconshock.com</font></strong></a> </p> <p>There are 497225 quality icons in 175 icon collections… 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> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a rel=nofollow target=_blank><strong><font color=#006699>iconbase.com</font></strong></a> </p> <p>Here you´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 ><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>  </p> <p> </p> <p> </p> <p> </p> <p> </p> <p><a 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’s Icons,Fantastic Dream by Rokey,Eico 1 year by Rokey,128×128 Icons Set 5,Antares Iconset,Perfect Fanstasy,Monster Icons,128×128 Icons Set 4,iMac Icons,Camino Icons,Nes Icons Pack,iLife and iWork ‘08 Icons,Mouse Category Season 03 etc…)</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.shnenglu.com/k71983/aggbug/50777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/k71983/" target="_blank">聂元?/a> 2008-05-22 16:27 <a href="http://www.shnenglu.com/k71983/archive/2008/05/22/50777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>指针一——基本用法和一些需要清楚的概念http://www.shnenglu.com/k71983/archive/2008/05/21/50700.html聂元?/dc:creator>聂元?/author>Wed, 21 May 2008 14:35:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/21/50700.htmlhttp://www.shnenglu.com/k71983/comments/50700.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/21/50700.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/50700.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/50700.html1.指针变量的声明和初始?br>指针是把内存地址做ؓ(f)其值的变量?br>(1)指针是一个变?br>(2)普通变量直接引用了一个?br>?

int a = 3;

那么a的值就??br>(3)指针变量只存攑ֆ存地址
(4)指针存放的内存地址往往存放有实际的|但也可能是另外一个指?br>?

int a = 3;
int * aptr = &a;//把a的地址通过取地址q算W赋l指针变?aptr
printf ("%p", aptr);//打印出指针的|?6q制的方?/span>
printf ("%p", &a);//打印出a的地址Q用16q制的方?/span>

(5)指针变量名间接应用了一个?我们使用间接引用q算W来取得具体的?br>printf (”%d”, *aptr);

(6)指针必须初始?可以把指针初始化为NULL
NULL?stdio.h>中定义,它的值是0
使用NULL使程序具有可L?/p>

注意Q?br>& 取地址q算W?取得M变量的地址
如:(x)

int a;
int *aptr;
int c[5];
//使用&q算W取得地址Qƈ打印出来
printf ("%p\n", &a);//取得整型变量a的内存地址
printf ("%p\n", &aptr);//取得指针变量aptr的内存地址
printf ("%p\n", &c[0]);//取得数组W一个元素的内存地址

* 比较让大家迷惑的是它在这里有两种不同的用法,但实际上它们q不是同L(fng)
(1)和具体的数据cd一h成对应的指针cd
*在声明语句表C变量是一个指?/p>

int *
float *
char *
double *

(2)间接引用q算W?/p>

int a = 3;
int * aptr = &a;//把a的地址通过取地址q算W赋l指针变?aptr
 
printf ("%d", *aptr);//通过a的地址间接引用变量a的?/span>

思考:(x)
仔细分析下面的语句的l果?/p>

int a = 8;
int * aPtr;
aPtr = &a;
 
printf ("%p\n", & * aPtr);
printf ("%p\n", * & aPtr);

提示Q一层层分析Q可以看?&(*aPtr)
{案在最下面?/p>

二、指针的传引用调?br>1.C语言中所有的函数都是传D?br>Z么,N指针不是传引用调用吗Q?br>不是QC语言只是把指针的值拷贝一份,传如函数内部?br>2.那么传递数l呢Q?/p>

void printArray (int *nPtr);

?/p>

void printArray (int array[]);

的效果都是一L(fng)Q都是传一个地址q去?br>另外Q要注意Q?br>数组名本w就是地址?br>3.指针的传引用调用我们也可UC为模拟传引用调用Q因为我们传的是一个地址Q?br>函数调用Ӟ函数的参C(x)拯q个地址Q然后通过复引用来操作变量?/p>

int cubeByReference (int * nPtr)//计算立方
{
    *
nptr = *nptr * *nptr * *nptr;
}

注意q里Q?br>(1)*(复引用运符)?(乘法q算W?优先U要高?br>所以可以不适用括号Q但是推荐你使用下面的语句,q样E序更加清晰?br>(2)nPtr是占用堆栈的Q函数cubeByReference?x)给nPtrq个指针变量分配I间Q?br>然后把传入的指针变量的Dl它?/p>

int cubeByReference (int * nPtr)//计算立方
{
    
(*nptr) = (*nptr) * (*nptr) * (*nptr);
}

4.传gؓ(f)什么不改变传入变量的?br>因ؓ(f)它是在堆栈中生成一个新的变量,然后把存攄值拷贝过来,最后函数结束的时候把该变量从堆栈中释

放掉Q所以ƈ不会(x)改变传入变量的倹{?br>像你用一张新的纸把一张纸上的东西复制一遍,然后在新的纸上写写画画,然后丢掉Qƈ不会(x)影响到原?/p>

的纸上的内容?br>5.传指?也就是传引用Z么会(x)改变)
因ؓ(f)指针l出了原来变量的地址Q?(复引用指?可以通过q个地址扑ֈq个变量q对它进行修攏V?/p>

三、指针的const限定
(1)指向非常量数据的非常量指?/p>

int a;
int b;
int *aPtr;
aPtr = &a;//OK
aPtr = &b;//OK
*
aptr = 3;//OK

(2)指向帔R数据的非帔R指针(不能修改指向变量中的数据)

const int * aPtr;

注意Qconst 修饰int

int a;
int b;
const int *aPtr;
aPtr = &a;//OK
aPtr = &b;//OK
*
aptr = 3;//ERROR 不能修改指向的变量中的数?/span>

(3)指向非常量数据的帔R指针(不能东指西指)

int * const aPtr;

注意: const 修饰指针变量 aptr;
数组名是一个很好的例子?参见字符串数l中的说明?

int a;
int b;
const int *aPtr = &a;
aPtr = &b;//ERROR  不能再指向另外一个变?/span>
*
aptr = 3;//OK

(4)指向帔R数据的常量指?不能修改指向变量中的数据,不能东指西指)
const int * const aPtr;

int a;
int b;
const int * const aPtr = &a;
aPtr = &b;//ERROR  不能再指向另外一个变?/span>
*
aptr = 3;//ERROR  不能修改指向的变量中的数?/span>

{案Q?br>1.实际?aPtr相当于a, &*aPtr取得a的地址
2.&aPtr取得aPtr的直臻I?&aPtr取得aPtr存放的|也就是a的地址
3.&*?x)相互抵消,实际?amp;*aPtr == aPtr == *&aPtr



]]>
存储cR链接和内存理(?——volatile和restricthttp://www.shnenglu.com/k71983/archive/2008/05/12/49619.html聂元?/dc:creator>聂元?/author>Mon, 12 May 2008 03:12:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/12/49619.htmlhttp://www.shnenglu.com/k71983/comments/49619.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/12/49619.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/49619.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/49619.html一、类型限定词volatile
限定词volatile告诉~译器该变量除了可以被程序改变以外还可被其他代理改变?br>它通常被用于硬件地址和与其它q行q行的程序共享的数据?br>如:(x)

volatile int locl;
volatile int *ploc;

你可能会(x)奇怪ؓ(f)什么ANSI觉得有必要把volatile作ؓ(f)一个关键字?br>原因是它可以方便~译器优化?br>例如

val1 = x;
/* 一些不使用x的代?*/
val2 = x;

一个聪明的~译器可能注意到你用了两次x,而没有改变它的倹{那么,它有可能把x临时存储在一个寄存器中?br>接着Q当val2需要xӞ可以通过从寄存器而非初始的内存位|中d该g节省旉?br>q个q程被称为缓?caching)?br>通常Q缓存是一个好的优化方式,但是如果在两个语句间其他代理改变了x的话׃是这样了?br>如果没有规定volatile关键字,那么~译器将无从得知q种改变是否可能发生?br>在ANSI中,如果声明中没有volatile关键字,那么~译器就可以假定一个值在使用q程中没有被修改Q它?yu)可以试着?/p>

化代码?br>一个值可以同时是const ?volatile?br>例如Q硬件时钟一般设定ؓ(f)不能q序改变,q一点它成为const;
但它被程序以外的代理改变Q这使它成ؓ(f)volatile.
那么我们可以q么声明Q?/p>

volatile const int loc;
const volatile int *ploc;

二、类型限定词restrict
关键字restrict用来消除数据间的相关性,~译器从而可以安排语句的q行执行?br>它只可以用于指针Qƈ表明指针是访问一个数据对象的唯一且初始的方式?br>我们通过一个例子来看看Q?/p>

int ar[10];
int * par = ar;
int * restrict restar = (int *)malloc (10 * sizeof (int));

注意Q指针restar是访问由malloc ()分配的内存的唯一且初始的方式?br>因此Q它可以由关键字restrict限定?br>而指针par既不是初始的Q也不是讉K数组ar中数据的唯一方式Q因此不可以把它限定为restrict?br>考虑下面的语句:(x)

for (n = 0; n < 10; n++)
{
    
par[n] += 5;
    
restar[n] += 5;
    
ar[n] *= 2;
    
par[n] += 3;
    
restar[n] += 3;
}

知道了restar是放问它所指向数据块的唯一初始化方式,~译器就可以用具有同h果的一条语句来代替包含restar?/p>

两个语句?/p>

resatr [n] += 8;

然而,~译器将两个包含par的语句精Z个语句将D计算错误?/p>

par[n] +=8;

原因是ar[n] *= 2;q条语句在par[n] += 3之前已经改变了par指针所指向数据的倹{?/p>

restrict的作用:(x)帮助~译器确定指针q行数D时Q是否可以进行优化?br>可以关键字restrict作ؓ(f)指针型函数参量的限定词用?br>q意味着~译器可以假定在函数体内没有其它标识W修Ҏ(gu)针指向的数据Q因而可以试着优化代码Q反之则不然?/p>

voie * memcpy (void * restrict s1, const void * restrict s2, size_t n);

关键字restrict有两个读者?br>一个是~译器,它告诉编译器可以自由地去做一些有关优化的假定?br>一个是用于Q它告诉用户仅用满restrict要求的参数?/p>

]]>
存储cR链接和内存理(?——链接、存储时?/title><link>http://www.shnenglu.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.shnenglu.com/k71983/archive/2008/05/06/49041.html</guid><wfw:comment>http://www.shnenglu.com/k71983/comments/49041.html</wfw:comment><comments>http://www.shnenglu.com/k71983/archive/2008/05/06/49041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/k71983/comments/commentRss/49041.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/k71983/services/trackbacks/49041.html</trackback:ping><description><![CDATA[<p>2.链接<br>一个C变量h下列链接之一:<br>外部链接 (external linkage)<br>内部链接 (internal linkage)<br>I链?(no linkage)<br>h代码块作用域或者函数原型作用域的变量具有空链接Q意味着它们是由其定义所在的代码块或函数原型所U有的?br>h文g作用域的变量可能有内部或者外部链接?br>一个具有外部链接的变量可以在一个多文gE序的Q何地方用?br>一个具有内部链接的变量可以在一个文件的M地方使用?br>那怎样知道一个文件作用域变量h内部链接q是外部链接?<br>你可以看看在外部定义中是否用了存储c说明符static:</p> <div id="xrtnhnl" class=hl-surround> <div id="tvnpz3v" class=hl-main><span id="pht3rpv" 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">//文g作用域,外部链接</span><span style="COLOR: gray"><br></span><span id="pjd399f" class=hl-types>static</span><span style="COLOR: gray"> </span><span id="v9fr331" 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">//文g作用域,内部链接</span><span style="COLOR: gray"><br></span><span id="jdnzl9n" 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>    ……<br></span><span style="COLOR: olive">}</span></div> </div> <p>和该文g属于同一E序的其他文件可以用变量giants?br>变量dodgers是该文gU有的,但是可以被该文g中的M函数使用?/p> <p>2.存储时期<br>一个C变量有两U存储时期之一Q?br>静态存储时?static storage duration)和自动存储时?automatic storage duration)?br>如果一个变量具有静态存储时期,它在E序执行期间一直存在?br>h文g作用域的变量h静态存储时期?br>注意对于h文g作用域的变量Q关键字static表示链接cdQƈ非存储时期?br>因ؓ(f)所有的文g作用域变量,无论它具有内部链接,q是h外部链接Q都h静态存储时期?/p> <p>h代码块作用域的变量一般情况下h自动存储时期?br>当程序进入定义这些变量的代码块时Q将些变量分配内存?br>当推个代码块Ӟ内存被释放?br>q样Q在一个函数调用结束后Q它的变量所占用的内存空间可以用来存储下一个被调用函数的变量?/p> <p>到现在我们所使用的局部变量都属于自动cd?/p> <div id="dv9npn3" class=hl-surround> <div id="399bd9n" class=hl-main><span id="xpbdpdd" 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 id="h3l39nt" 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>    </span><span id="ph3nh9r" class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">index</span><span style="COLOR: gray">;<br>    </span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span style="COLOR: blue">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"> < </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>    </span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>        </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>        </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></span><span style="COLOR: olive">}</span></div> </div> <p>总论Qc使用作用域、链接和存储时期来定?中存储类?br>自动Q寄存器、具有代码块作用域的静态、具有外部链接的静态、具有内部链接的静?br>1.自动变量<br>自动变量h自动存储时期、代码块作用域和I链接?br>默认情况下,在代码块或函数的头部定义的Q意变量都属于自动存储cR?br>你可以显C的使用关键字auto来表明一个变量ؓ(f)自动变量Q但我们一般不写?/p> <div id="fx39x9p" class=hl-surround> <div id="r93jltz" class=hl-main><span id="dfhlftj" 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 id="xt99xv9" 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 id="hjlfp3z" class=hl-types>auto</span><span style="COLOR: gray"> </span><span id="ptnhr9t" 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> <br></span><span id="bdxjdrz" 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 id="l9r999x" 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>    </span><span id="n3jfzx9" class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">m</span><span style="COLOR: gray">;  </span><span style="COLOR: #ffa500">// m的作用域</span><span style="COLOR: gray"><br>    </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">, &</span><span style="COLOR: blue">m</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br>    </span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>        </span><span id="l3v3ff9" 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>        </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"> < </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>        </span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>            </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>        </span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>    </span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br>    <br>    </span><span style="COLOR: green">return</span><span style="COLOR: gray"> </span><span style="COLOR: blue">m</span><span style="COLOR: gray">;  </span><span style="COLOR: #ffa500">// m的作用域, i已经消失</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div> </div> <p>如果在内层代码块定义了一个具有和外层代码块便来那个同一名字的变量,会(x)怎样?<br>(最好不要在你的代码中这样做)<br>q时内层代码块将使用在内层代码块中这个新定义的变量?br>我们UC为内层定义覆?hide)了外部定义,只有当运行离开内层代码块是Q外部变量才?x)重新恢复用?/p> <div id="jl39ddb" class=hl-surround> <div id="dpr3hx9" class=hl-main><span id="339bv9p" class=hl-prepro>#include </span><span style="COLOR: #8b0000"><</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">></span><span id="j9b9rz9" class=hl-prepro></span><span style="COLOR: gray"><br></span><span id="991hj1l" 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 id="vxp9ll3" 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 id="bd3z9bz" 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>    </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>    </span><span style="COLOR: olive">{</span><span style="COLOR: gray"><br>        </span><span id="hjvpr99" 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>        </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>    </span><span style="COLOR: olive">}</span><span style="COLOR: gray"><br></span><span style="COLOR: olive">}</span></div> </div> <p>注意Q?br>c99中规定,语句若ؓ(f)循环或者if语句的一部分Q即使没有用{},也认为是一个代码块?/p> <div id="d9bhrzj" class=hl-surround> <div id="f3p3xv3" class=hl-main><span id="39lhbj1" class=hl-prepro>#include </span><span style="COLOR: #8b0000"><</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">></span><span id="p3rxjf9" class=hl-prepro></span><span style="COLOR: gray"><br></span><span id="htd3z33" 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 id="btn9zpr" 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 id="9z9lf9p" 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>    </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>    <br>    </span><span style="COLOR: green">for</span><span style="COLOR: gray"> </span><span style="COLOR: olive">(</span><span id="j3tvh99" 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"> < </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>        </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>    <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">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>    <br>    </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?br>除非(zhn)显式地初始化自动变量,否则它不?x)被自动初始化?/p> <div id="lnh3l3n" class=hl-surround> <div id="9nhn9vd" class=hl-main><span id="xzjdpdx" 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 id="xzjlxdf" 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 id="bdfztzx" class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">repid</span><span style="COLOR: gray">;<br>    </span><span id="v3tf3db" 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的初值则是先前占用分配给它的I间的Q意倹{不要指望这个值是0?/p> <p>2.寄存器变?br>通常Q变量存储在计算机内存中。如果幸q,寄存器变量可以被存储在CPU的寄存器中,q样速度?x)更快?br>在其它许多方面,它和自动变量是一L(fng)?br>通过使用存储cd说明Wregister可以声明寄存器变量?/p> <div id="x3pb3xn" class=hl-surround> <div id="f3rbvtr" class=hl-main><span id="ht9jl9t" 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 id="3tv3pn1" 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 id="9f9rlrh" class=hl-types>register</span><span style="COLOR: gray"> </span><span id="vxztnlj" 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>我们说如果幸q是因ؓ(f)声明一个寄存器cd量仅仅是一个请求,而不是一条直接命令?br>因ؓ(f)CPU寄存器往往很少Q编译器必须在可用寄存器的个数和可用高速内存的数量之间做权衡?br>q种情况下,变量成ؓ(f)一个普通的自动变量?br>但是Q你不能对它使用地址q算W?br>可以把一个Ş式参量请求ؓ(f)寄存器变量?/p> <div id="hbv339d" class=hl-surround> <div id="3vxbl3d" class=hl-main><span id="r9dfhv9" 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 id="x99ln9l" class=hl-types>register</span><span style="COLOR: gray"> </span><span id="l9hjd99" 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.h代码块作用域的静态变?br>静态变量像是一个不可变的变量?br>但实际上Q静态指变量的的位置固定不动?br>h文g作用域的变量自动的具有静态存储时期?br>也可以创建具有代码块作用域,兼具有静态存储的局部变量?br>q些变量和自动变量具有相同的作用域,当包含这些变量的函数完成工作Ӟ它们q不消失?br>从一ơ函数调用到下一ơ调用,计算机都记录着他们的倹{?br>我们可以使用存储c说明符static在代码块内声明这些变量?/p> <div id="93b9lbj" class=hl-surround> <div id="t9v9fnd" class=hl-main><span id="lhblf3r" class=hl-prepro>#include </span><span style="COLOR: #8b0000"><</span><span style="COLOR: red">stdio.h</span><span style="COLOR: #8b0000">></span><span id="hjvxzxf" class=hl-prepro></span><span style="COLOR: gray"><br></span><span id="lf3v3rp" 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 id="d9999fd" class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span id="9jdhrhf" 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 id="3ln3hpn" 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 id="3r99vvr" class=hl-types>int</span><span style="COLOR: gray"> </span><span style="COLOR: blue">count</span><span style="COLOR: gray">;<br> <br>    </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"> <= </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>    </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">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>        </span><span style="COLOR: blue">trystat</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>    <br>    </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> <br></span><span id="ld9l399" 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 id="h9rt3rp" 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 id="pjd39lj" 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>    </span><span id="bdnp99z" class=hl-types>static</span><span style="COLOR: gray"> </span><span id="xrbfzn3" 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>    <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">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>注意Q?br>对函数参C能用static?br>4.h外部链接的静态变?br>h外部链接的静态变量具有文件作用域、外部链接和静态存储时期?br>q一cd的变量成为外部变?external variable?br>把变量的定义声明攑֜所有函C外,卛_Z一个外部变量?br>Z使程序更加清晎ͼ可以在用外部变量的函数中通过使用extern关键字来再次声明它?br>如果变量是在别的文g中定义的Q用extern来声明该变量是必须的?/p> <div id="jd3jljr" class=hl-surround> <div id="3fzbddb" class=hl-main><span id="9b9dx99" 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></span><span id="nz9dx3f" 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">//外部声明的数l?/span><span style="COLOR: gray"><br></span><span id="ptn93vl" class=hl-types>extern</span><span style="COLOR: gray"> </span><span id="fztp399" 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">//必须的声明,因ؓ(f)Coal在其它文件中定义</span><span style="COLOR: gray"><br> <br></span><span id="rlf9rpf" 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 id="9dxhbb3" class=hl-types>void</span><span style="COLOR: olive">)</span><span style="COLOR: gray">;<br></span><span id="33lv9b9" 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 id="39dhj9r" 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 id="9f99tbz" class=hl-types>extern</span><span style="COLOR: gray"> </span><span id="pzdx999" 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>    </span><span id="j3t9f99" class=hl-types>extern</span><span style="COLOR: gray"> </span><span id="fz9nxn3" 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 id="fhztn3h" 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 id="9r93tbh" 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>注意Q?br>不同于自动变量,如果(zhn)不对外部变量进行初始化Q他们将自动被赋初??br>q一原则也适用于外部定义的数组?/p> <p>5.h内部静态链接的静态变?br>通过使用存储c说明符(注意不是静态变量声明符)static在所有函数的外部q行定义Q前面已l说q该变量为整个文件私?/p> <p>Q这里不再讨论?/p> <div id="vv9b99t" class=hl-surround> <div id="f3zrd39" class=hl-main><span id="tdx3jbh" 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 id="lv9bf99" class=hl-types>static</span><span style="COLOR: gray"> </span><span id="3919f99" 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.shnenglu.com/k71983/aggbug/49041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/k71983/" target="_blank">聂元?/a> 2008-05-06 20:18 <a href="http://www.shnenglu.com/k71983/archive/2008/05/06/49041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>存储cR链接和内存理(一)——作用域http://www.shnenglu.com/k71983/archive/2008/05/06/49028.html聂元?/dc:creator>聂元?/author>Tue, 06 May 2008 10:21:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/06/49028.htmlhttp://www.shnenglu.com/k71983/comments/49028.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/06/49028.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/49028.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/49028.html存储cR链接和内存理
1.作用?br>作用域描qCE序中可以访问一个标识符的一个或多个区域?br>一个C变量的作用域可以是代码块作用域、函数原型作用域或者文件作用域?br>代码块作用域
一个代码块是包含在开始花括号和对应的l束花括号之内的一D代码?br>例如Q整个函C是一个代码块?br>一个函数内的Q一复合语句也是代码块?br>在代码快中定义的变量h代码块作用域(block scope),从该变量被定义的地方到包含该定义的代码块的末该变量均可?/p>

?br>另外Q函数的形式参数管在函数的开始花括号前进行定义,也同样具有代码块作用?q且属于包含函数体的代码块?/p>

double blocky (double cleo)
{
    
double patrick = 0.0;
    
    
return patrick;
}

在上面这个例子中Qcleo和patrick都有知道l束花括L(fng)代码作用域?/p>

在一个内部代码块中声明的变量Q其作用域只局限于该代码块Q?/p>

double blocky (double cleo)
{
    
double patrick = 0.0;
    
int i;
    
for (i=0; i < 10; i++)
    
{
        
double q = cleo * i// q作用域的开?/span>
        ……
        
patrick *= q;
    
}//q作用域的l束
    
return patrick;
}

在这个例子中Qq的作用域被限制在内部代码块内Q只有该代码内的代码可以讉Kq?br>C99允许在一个代码块中的M位置声明变量Q用之前请注意~译器能不能支持?br>如,你可以这样声?/p>

for (int i=0; i < 10; i++ )
{
    
printf ("A C99 feature: i=%d", i);
}

2.函数原型作用?br>从变量定义处一直到原型声明的末,q意味着~译器在处理一个函数原型的参数Ӟ它所兛_的只是该参数的类型;(zhn)

用的名字是无关紧要的?/p>

int mighty (int mouse, double large);

3.文g作用?br>一个在所有函C外定义的变量h文g作用?(file scope)?br>h文g作用域的便狼从它定义处到包含该定义的文gl尾处都是可见的?/p>

#include <stdio.h>
int units = 0;//h文g作用域的变量
void critic (void);
int main (void)
{
    ……
}
 
void critic (void)
{
    ……
}

q里Q变量unitsh文g作用域,在main ()和critic ()中都可以使用它。因为它们可以在不止一个函C使用Q文件作用域变量也被UCؓ(f)全局变量(global varibale)?/p>

4.goto
函数作用域只适用于goto语句使用的标{。函C用域意味着一个特定函C的goto标签对该函数中Q何地方的代码都是可见的,无论该标{և现在哪一个代码块中?/p>

]]>
字符串函??http://www.shnenglu.com/k71983/archive/2008/05/06/49009.html聂元?/dc:creator>聂元?/author>Tue, 06 May 2008 07:28:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/06/49009.htmlhttp://www.shnenglu.com/k71983/comments/49009.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/06/49009.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/49009.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/49009.html1.strncmp ()函数
strncmp ()函数可以比较到字W串的不同处Q也可以比较完由W三个参数指定的字符丌Ӏ?br>例如Q如果想搜烦?#8221;astro”开头的字符Ԍ(zhn)可以限定搜索前5个字W?/p>
//使用strncmp ()函数
#include <stdio.h>
#inlcude <string.h>
 
#define LISTSIZE 5
 
int main (void)
{
    
char * list[LISTSIZE] = {
                
"astronomy", "astounding",
                
"astrophysics", "ostracize",
                
"asterism"   
                
};
    
int count = 0;
    
int i;
    
    
for (i=0; i < LISTSIZE; i++)
    
{
        
if (strncmp (list[i], "astro", 5) == 0)
        
{
            
printf ("Found: %s\n", list[i]);
            
count++;
        
}
    
}
    
    
printf ("The list contained %d words beginning with astro.\n", count);
    
    
return 0;
}

2.strcpy () 和strncpy ()函数
如果pts1和pts2都是指向字符串的指针Q则下面的表辑ּ只复制字W串的地址而不是字W串本n?/p>

pts1 = pts2;

如果你确实希望复制字W串Q那么可以用strcpy ()函数?/p>

//copy1.c strcpy ()CZ
#include <stdio.h>
#include <string.h> //声明strcpy ()函数
#define SIZE 40
#define LIM 5
 
int main (void)
{
    
char qwords[LIM][SIZE];
    
char temp[SIZE];
    
int i = 0;
 
    
printf ("Enter %d words beginning with q:\n", LIM);
    
while (i < LIM && gets(temp))
    
{
        
if (temp[0] != 'q')
        
{
            
printf ("%s doesn't begin with q!\n", temp);
        
}
        
else
        
{
            
strcpy (qwords[i], temp);
            
i++;
        
}       
    
}
    
puts ("Here are the words accepted:");
    
for (i=0; i < LIM; i++)
    
{
        
puts (qwords[i]);
    
}
 
    
return 0;
}

h意只有当输入的单词通过了q判断Q计数值i才会(x)增加?br>q里使用了一个基于字W的判断

if (temp[0] != 'q')

q相当于

if (strncmp (temp, "q", 1) != 0)

注意在,strcpy 两个参数中,W二个参数temp指向的字W串被复制到W一个参数qword[i]所指向的数l中?br>temp被称为源字符Ԍqword被称为目标字W串?br>Z么要q么设计Qؓ(f)什么不设计到前面?
如果注意到它和赋D句的序一P目标在左边,很Ҏ(gu)C参数的顺序?/p>

3.strcpy ()的其它特?br>首先Q它是一个char *cdQ它q回的是W一个参数的倹{?br>W二Q第一个参C需要指向数l的开始,q样可以只复制数组的一部分?/p>

//copy2.c
#include <stdio.h>
#include <string.h>
#define WORDS "beast"
#define SIZE 40
 
int main (void)
{
    
char *orig = WORDS;
    
char copy[SIZE] = "Be the best that you can be.";
    
char *ps;
 
    
puts (orig);
    
puts (copy);
    
ps = strcpy (copy + 7, orig);
    
puts (copy);
    
puts (ps);
 
    
return 0;
}

注意ps指向copy的第8个元素,q是因ؓ(f)W一个参数是copy + 7?/p>

4. strncpy ()
strcpy ()的缺Ҏ(gu)而易见,它不(g)查目标字W串是否能容U_下源字符丌Ӏ?br>strncpy ()?x)用W三个参数指明最大可复制的字W数?/p>

//copy3.c strncpy ()CZ
#include <stdio.h>
#include <string.h> //声明strcpy ()函数
#define SIZE 40
#define TARGSIZE 7
#define LIM 5
 
int main (void)
{
    
char qwords[LIM][TARGSIZE];
    
char temp[SIZE];
    
int i = 0;
 
    
printf ("Enter %d words beginning with q:\n", LIM);
    
while (i < LIM && gets(temp))
    
{
        
if (temp[0] != 'q')
        
{
            
printf ("%s doesn't begin with q!\n", temp);
        
}
        
else
        
{
            
strncpy (qwords[i], temp, TARGSIZE - 1);
            
qwords[i][TARGSIZE-1] = '\0';
            
i++;
        
}       
    
}
    
puts ("Here are the words accepted:");
    
for (i=0; i < LIM; i++)
    
{
        
puts (qwords[i]);
    
}
 
    
return 0;
}

注意Q在q里函数复制的字W串可能最后没有空字符Q所以你必须手动在最后放|一个空字符Q而且注意q里是复制n个字W过去,所以要留一个给I字W?/p>

Q所以在q里是TARGSIZE - 1;

strncpy (qwords[i], temp, TARGSIZE - 1);
qwords[i][TARGSIZE-1] = '\0';

5.sprintf ()函数
sprintf ()函数是在stdio.h而不是在string.h中声明的?br>它的作用和printf ()一P但是它写到字W串里而不是写到输出显C?br>它提供了把几个元素组合成一个字W串的一U途径?br>sprintf ()的第一个参数是目标字符串地址?/p>

//format.c
#include <stdio.h>
#define MAX 20
 
int main (void)
{
    
char first[MAX];
    
char last[MAX];
    
char formal[2 * MAX + 10];
    
double prize;
 
    
puts ("Enter your first name: ");
    
gets (first);
    
puts ("Enter your last name: ");
    
gets (last);
    
puts ("Enter your prize money: ");
    
scanf ("%1f", prize);
    
sprintf (formal, "%s, %-19s: $%6.2f\n", last, first, prize);
    
puts (formal);
 
    
return 0;
}

6.其它字符串函?/p>

char *strcpy (char * s1, const char * s2);

该函数把s2指向的字W串(包括I字W?复制到s1指向的位|,q回值是s1?/p>

char *strncpy (char * s1, const char *s2, size_t n);

该函数把s2指向的字W串(包括I字W?复制到s1指向的位|,复制的字W数不超qn个。返回值是s1?br>I字W后的字W串不被复制?br>如果源字W串的字W数于n个,在目标字W串中就以空字符填充?br>如果源字W串的字W数大于或等于n个,I字W就不被复制。返回值是s1?/p>

char *strcat (char *s1, const char *s2);

s2指向的字W串(包括I字W?复制到s1指向的结。复制过来的s2覆盖了s1的空字符。返回gؓ(f)s1?/p>

char *strncat (char *s1, const char *s2);

s2指向的字W串中的前n个字W?包括I字W?复制到s1指向的结。复制过来的s2覆盖了s1的空字符?br>s2字符串中的空字符?qing)其后的M字符都不?x)被复制Qƈ且追加一个空字符到所得结果后面?br>q回gؓ(f)s1?/p>

int strcmp (const char *s1, const char *s2);

如果s1字符串在机器~码序中落后于s2字符Ԍ函数的返回值是一个正敎ͼ如果两个字符串相同,q回值是0;
如果W一个字W串在机器编码顺序中先于W二个字W串Q返回值是一个负数?/p>

int strncmp (const char *s1, const char *s2);

该函C用和strcmp ()一P只是比较n个字W后或者遇见第一个空字符时会(x)停止比较?/p>

char *strchr (const char *s1, int c);

该函数返回一个指向字W串s中存攑֭Wc的第一个位|的指针(标志l束的空字符是字W串的一部分Q因此也可以搜烦到它)?br>如果没有扑ֈ该字W,函数p回空指针?/p>

char *strpbrk (const char *s1, const char *s2);

该函数返回一个指针,指向字符串s1中存放s2字符串的M字符的第一个位|。如果没有找到该字符。如果没扑ֈM字符Q返回空指针?/p>

char *strrchr (const char * s, int c);

该函数返回一个指针,指向字符串s中字Wc最后一ơ出现的地方?标志l束的空字符是字W串的一部分Q因此也可以搜烦到它)?br>如果没有扑ֈ该字W,函数p回空指针?/p>

char *strstr (const char *s1, const char *s2)

该函数返回一个指针,指向s1字符串中W一ơ出现s2字符串的地方。如果在s1中没扑ֈs2字符Ԍ函数p回空指针?/p>

size_t strlen (const char *s);

q回字符串的长度?/p>

单应用:(x)
在用fgets ()函数Ӟd一行输入,q个函数把换行符存储到目标字W串中?br>我们可以使用strchr ()函数来用一个空字符替换q个换行W?/p>

char line [80];
char * find;
 
fgets (line, 80, stdin);
find = strchr (line, '\n');
if (find)
{
    *
find = '\0';
}


]]>
字符串函??http://www.shnenglu.com/k71983/archive/2008/05/06/48999.html聂元?/dc:creator>聂元?/author>Tue, 06 May 2008 06:10:00 GMThttp://www.shnenglu.com/k71983/archive/2008/05/06/48999.htmlhttp://www.shnenglu.com/k71983/comments/48999.htmlhttp://www.shnenglu.com/k71983/archive/2008/05/06/48999.html#Feedback0http://www.shnenglu.com/k71983/comments/commentRss/48999.htmlhttp://www.shnenglu.com/k71983/services/trackbacks/48999.html字符串函??
1.标准库中fgets ()?fputs ()的实现基本算?/p>
// fgets ()函数:从iop指向的文件中最多读取n-1个字W,再加上一个NULL
char *fgets (char *s, int n, FILE *iop)
{
    
register int c;
    
register char *cs;
 
    
cs = s;
    
while (--n > 0 && (c = getc(iop)) != EOF)
    
{
        
if ((*cs++ = c) == '\n')
        
{
            
break;
        
}
    
}
    *
cs = '\0';
    
    
return (c == EOF && cs == s) ? NULL : s;
}


// fputs 函数:字W串s输出到iop指向的文件中
int fputs (char *s, FILE *iop)
{
    
int c;
    
    
while (c = *s++)
    
{
        
putc (c, iop);
    
}
    
    
return ferror(iop) ? EOF : 非负?
}


]]>
avպƷþþþþa| ҹþþþþþþþ| 97Ʒ91þþþþ| ƷþþþAV| ƷVAþþþþþñ| ƷþòҰ| ޹Ʒþþþ| ҹƵþþþһ| ޹þþþƷС˵| ٸ޾þþþþ| þþþ18| þþƷAVӰ| 91ƷѾþþþþþþ| þþþ99оƷ10 | þøݾƷԴվ| þþƷƷ޾Ʒ| þþþþ| þѵľƷV| þþƷƷƾ| Ʒ99þ99þþ| þþþòҰ¸߳| ƷþþӰ㽶 | ݺɫþþۺ| ޾Ʒһþ| þۺϾɫۺ97_þþ| þ޾Ʒa| 88þþƷһëƬ| ɫþþۺ| ޾Ʒþþwww| ŷþþþ| ˮϵþþƷ| ˾þô߽AV| þùAVJUST鶹| ɫۺϾþĻۺ| þùƷƵ| 99ȳ˾ƷѾþ| ˾þô߽Ʒ| ݲݾþþר| ھƷþþþþþɬ| þۺϾɫۺϾƷ| ޹˾þۺһ|