<?xml version="1.0" encoding="utf-8"?><rss version="2.0">
<channel>
<title><![CDATA[whyhappy]]></title>
<link>http://blog.pfan.cn/whyhappy</link>
<description>编程爱好者博客</description>
<language>zh-cn</language>
			<item>
		<title><![CDATA[QQ的HTTP接口探究]]></title>
		<link>http://blog.pfan.cn/whyhappy/16309.html</link>
		<description><![CDATA[作者：Hackfan 日期：2005.8.21凌晨 联系：QQ:106814 Email:hackfan@vip.sina.com １、研究说明 　　Tencent在tqq.tencent.com的8000有一个使用HTTP的QQ接口，通过这个接口，可以进行一些基本的操作，如：登陆、登出、改变登陆状态(上线、忙碌、离线、隐身)、添加删除好友、查看好友信息、发送验证信息(接受被加为好友、申请加对方为好友、拒绝被加为好友)、收发用户消息、系统信息。 　　目前我研究的是1.1版本的HTTP QQ协议，研究是微程在的成果上进行的，不敢说有什么超越，只不过更为详细和准确。 ２、接口说明： 　　接口位置：tqq.tencent.com:8000 　　通信协议：HTTP 　　数据传输方法：POST 　　HTTP请求格式： POST HTTP/1.1 Host: tqq.tencent.com:8000 Content-Type: text/plain; charset=UTF-8 Content-length: 长度 Connection: close 数据 　　其中长度为 数据 的长度，数据的格式： 　　VER=1.1&amp;CMD=命令&amp;SEQ=标记&amp;UIN=QQ号&amp;.... 　　以上４个参数是每个请求都必有的。其中，VER表示协议的版本，目前为1.1，据说1.2已经出来了，这个乱写的话，服务器返回NULL；CMD为操作的指令，有Login、List、Query_Stat、GetInfo、AddToList、Ack_AddToList、DelFromList、Change_Stat、GetMsgEx、CLTMSG、Logout；SEQ为当前请求的标记，防止重复发送，可以用当前时间，也可以用随机数；UIN是当前执行操作的QQ号。不过不同的CMD还需要不同的参数，下面我就公布我的研究成果。 ３、研究方法： 　　我对目前网上的资料不够满意，就自己写程序，发送多条相同CMD不同参数的请求，根据服务器的返回，来做判断。感兴趣的朋友可以参考一下，此处可以跳过。 　　下面我公布我探测的代码(PHP)： 代码: &lt;? $uin = "QQ号"; $pwd = md5("QQ密码"); //登陆测试 $poststring[] = "VER=1.1&amp;CM]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2006-07-01 23:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[SetTimer函数的用法]]></title>
		<link>http://blog.pfan.cn/whyhappy/14919.html</link>
		<description><![CDATA[1&nbsp;）用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型&nbsp;UINT_PTR&nbsp;SetTimer(&nbsp;&nbsp;HWND&nbsp;hWnd,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;窗口句柄&nbsp;&nbsp;UINT_PTR&nbsp;nIDEvent,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;定时器ID，多个定时器时，可以通过该ID判断是哪个定时器&nbsp;&nbsp;UINT&nbsp;uElapse,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;时间间隔,单位为毫秒&nbsp;&nbsp;TIMERPROC&nbsp;lpTimerFunc&nbsp;&nbsp;&nbsp;//&nbsp;回调函数);例如&nbsp;SetTimer(m_hWnd,1,1000,NULL);&nbsp;//一个1秒触发一次的定时器在MFC程序中SetTimer被封装在CWnd类中，调用就不用指定窗口句柄了于是SetTimer函数的原型变为：&nbsp;UINT&nbsp;SetTimer(UINT&nbsp;nIDEvent,UINT&nbsp;nElapse,void(CALLBACK&nbsp;EXPORT&nbsp;*lpfnTimer)(HWND,UINT&nbsp;,YINT&nbsp;,DWORD))&nbsp;当使用SetTimer函数的时候，就会生成一个计时器。函数中nIDEvent指的是计时器的标识，也就是名字。nElapse指的是时间间隔，也就是每隔多长时间触发一次事件。第三个参数是一个回调函数，在这个函数里，放入你想要做的事情的代码，你可以将它设定为NULL，也就是使用系统默认的回调函数，系统默认认的是onTime函数。这个函数怎么生成的呢？你需要在需要计时器的类的生成onTime函数：在ClassWizard里，选择需要计时器的类，添加WM_TIME消息映射，就自动生成onTime函数了。然后在函数里]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2006-05-26 18:23:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《白手起家Win32SDK应用程序》第八篇 关闭窗口的同时退出程序]]></title>
		<link>http://blog.pfan.cn/whyhappy/6703.html</link>
		<description><![CDATA[第8篇 关闭窗口的同时退出程序
白云小飞&nbsp;&nbsp;&nbsp;&nbsp;还记得上篇中最后说到一个问题吗？当我们关闭程序窗口时，窗口确实是关闭了，可是程序并没有退出啊。为什么呢？？？一． 理解程序的退出条件：&nbsp;&nbsp;&nbsp;&nbsp;首先，我们要先明白程序退出的条件，看上篇中的这段代码：&nbsp;&nbsp;&nbsp;&nbsp;while(GetMessage(&amp;msg, NULL, 0, 0)) //获取一个消息，成功后会放在msg中。&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TranslateMessage(&amp;msg); //消息进行必要的预处理转换。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DispatchMessage(&amp;msg); //调用WinProc回调函数，将msg传递给WinProc函数 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;如果程序一直在这个消息循环中，程序就没能退出。只有当GetMessage收到一个WM_QUIT的消息，则返回值才会为零，退出循环，程序得以结束。（这个道理应该好理解吧？）二． 点关闭按钮时，发生了什么&nbsp;&nbsp;&nbsp;&nbsp;当我们点窗口右上角的关闭按钮时，到底发生了什么事呢？（请边看源代码，边体会下面的分析噢！）&nbsp;&nbsp;&nbsp;&nbsp;第一． 它并没有（或最终没有导致）发出WM_QUIT的消息。因此GetMessage函数不会收到WM_QUIT消息，就没法跳出循环了。（那么又产生了什么消息呢？）&nbsp;&nbsp;&nbsp;&nbsp;第二． 点关闭按钮时，产生WM_CLOSE的消息。GetMessage会收到WM_CLOSE消息的MSG结构信息。&nbsp;&nbsp;&nbsp;&nbsp;第三． 按前篇所述的消息处理流程可知：DespatchMessage会调用WinProc回调函数，并把WM_CLOSE消息的相关信息传递给WinProc]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-11-08 17:31:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第七篇 获取消息及对消息缺省处理]]></title>
		<link>http://blog.pfan.cn/whyhappy/6702.html</link>
		<description><![CDATA[&nbsp;



第7篇 获取消息及对消息缺省处理
白云小飞一 重提上篇的问题：&nbsp;&nbsp;&nbsp;&nbsp;还记得在上一篇的最后，经过调试后我们发现的问题吗？&nbsp;&nbsp;&nbsp;&nbsp;1． 窗口不能自动被激活（即成为当前窗口）。只有最小化其它应用程序的窗口后，才能看到我们的这个窗口。（注意：在ShowWindow(hWnd, ncmdshow);函数中ncmdshow值我说过是SW_SHOWNORMAL值，应该会将窗口激活才对啊！）&nbsp;&nbsp;&nbsp;&nbsp;2． 无法进行调整窗口大小，移动窗口位置等等的所有对窗口的操作。&nbsp;&nbsp;&nbsp;&nbsp;你认为是什么原因呢？二 且听我说：&nbsp;&nbsp;&nbsp;&nbsp;1． ShowWindow(hWnd, SW_SHOWNORMAL)函数作用虽然是显示窗口并激活窗口。它确实完成了窗口的显示，但是，它并没有去激活窗口，只是发了一系列与激活窗口有关的消息，这才是ShowWindow(…)函数所做的事。（那又由谁来激活呢？）&nbsp;&nbsp;&nbsp;&nbsp;2． 真正激活窗口的任务是由DefWindowProc( )完成的。哦，也就是说我们得让DefWindowProc( )收到ShowWindow( )产生的消息并根据消息来执行相应任务。&nbsp;&nbsp;&nbsp;&nbsp;3． 但ShowWindow( )产生的消息只是加入到该线程的消息队列中，并没有自动地去调用WinProc( )的回调函数对消息处理。因此，DefWindowProc( )也就没被调用，自然地就没法激活窗口了。（请边看代码边分析我的这段话吧！呵呵，你得有点想像力了！）&nbsp;&nbsp;&nbsp;&nbsp;4． 哦，这不由地让我想起前面的创建窗口函数CreateWindowEx( ) 。这两个函数在执行中都会产生若干的消息。但CreateWindowEx会自动地调用了WinProc( ) 函数，而ShowWindow( )没有这样。&nbsp;&nbsp;&nbsp;&nbsp;5． 同理，我们在窗口中的各种操作（调整大小、移动窗口等等），虽然会产生各种消息，但操作系统也只是把它们排入我们线程的消息队]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-11-08 17:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第六篇 显示你所创建的窗口]]></title>
		<link>http://blog.pfan.cn/whyhappy/6701.html</link>
		<description><![CDATA[第六篇 显示你所创建的窗口
白云小飞&nbsp;&nbsp;&nbsp;&nbsp;哈！到了显示窗口的时候啦！&nbsp;&nbsp;&nbsp;&nbsp;看，下面这个函数就是用来显示窗口的：BOOL ShowWindow( HWND hWnd, int nCmdShow);一 ShowWindow函数的参数及返回值&nbsp;&nbsp;&nbsp;&nbsp;hWnd就是你要显示的窗口的句柄：&nbsp;&nbsp;&nbsp;&nbsp;nCmdShow是窗口的显示方式，其可能的值如下：SW_HIDE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;隐藏应用程序窗口SW_SHOWNORMAL&nbsp;&nbsp;&nbsp;&nbsp;激活并显示窗口，如果窗口被最大化或最不化，系统恢复窗口到原始大小和位置（与SW_RESTORE）SW_RESTORE&nbsp;&nbsp;&nbsp;&nbsp;同SW_SHOWNORMALSW_NORMAL&nbsp;&nbsp;&nbsp;&nbsp;SW_SHOWMINIMIZED&nbsp;&nbsp;&nbsp;&nbsp;激活并最小化窗口SW_SHOWMAXIMIZED&nbsp;&nbsp;&nbsp;&nbsp;激活并最大化窗口SW_SHOW&nbsp;&nbsp;&nbsp;&nbsp;激活窗口，并按其当前大小和位置显示SW_MAXINIZE&nbsp;&nbsp;&nbsp;&nbsp;最大化应用程序窗口SW_MINIMIZE&nbsp;&nbsp;&nbsp;&nbsp;最不化应用程序窗口SW_SHOWNOACTIVATE&nbsp;&nbsp;&nbsp;&nbsp;按最近大小和位置显示窗口，但不改变激活特性SW_SHOWMINNOACTIVE&nbsp;&nbsp;&nbsp;&nbsp;最小化窗口，但不改变其激活特性SW_SHOWNA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;按当前大小各位置显示窗口，但不改变其激活特性返回值：成功则返回TRUE，不成功则返回FALSE。二 先来两个例子&nbsp;&nbsp;&nbsp;&nbsp;例一：现假设已经]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-11-08 17:28:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第五篇 利用已注册的窗口类来创建一个窗口&amp;nbsp;]]></title>
		<link>http://blog.pfan.cn/whyhappy/6246.html</link>
		<description><![CDATA[第五篇 利用已注册的窗口类来创建一个窗口
白云小飞
一 用CreateWindowEx函数来创建窗口&nbsp;&nbsp;&nbsp; 上篇中我们完成了向Windows系统进行窗口的“申请”工作（即注册一个窗口类）。本篇就是要用这个窗口类来创建一个窗口。&nbsp;&nbsp;&nbsp; 下面这个API函数就是专门用来创建一个窗口的：HWND&nbsp; WINAPI&nbsp; CreateWindowEx(&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwExStyle,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCSTR lpClassName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LPCSTR lpWindowName,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DWORD dwStyle,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int X,&nbsp; int Y,&nbsp;]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-22 21:00:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第四篇 注册一个窗口类]]></title>
		<link>http://blog.pfan.cn/whyhappy/6198.html</link>
		<description><![CDATA[第四篇 注册一个窗口类
&nbsp;
白云小飞
一 创建并显示一个窗口的“遐想”。? 首先，要显示的窗口在哪里呢？&nbsp;&nbsp;&nbsp; 要想显示你自己的窗口，显然你得事先创建一个自己的窗口。当你想要一个窗口时，Window系统才会为你创建窗口。不要时，Window再销毁这个窗口。噢，这是多么相当然的一种机制啊，你说是吧！也就是说我们得先创建一个窗口才能显示。（否则哪里来的窗口给你显示呢？）? 其次，你想创建什么样的窗口呢？&nbsp;&nbsp;&nbsp; 那么，创建什么样的窗口呢？创建前，Window系统可不知道你要的是什么类型的窗口啊（比如标题栏上显示什么图标，鼠标形状是什么，窗口背景颜色等等）。这些类型信息应在你创建前事先告诉Window系统。可以采用这种方法：就是我们事先写一份要创建窗口的类型申请表，提交（注册）给Window系统。然后在创建时，可以让Windows按这个申请表来创建你所要的窗口了。也就是说我们还应该先提交一个申请表，申请成功后再根据这个表创建一个窗口。&nbsp;&nbsp;&nbsp; 依据上述的理由，我假想了以下几个步骤要做：&nbsp;&nbsp;&nbsp; 第一． 你得先填写一份你想创建的窗口类的“申请表”。&nbsp;&nbsp;&nbsp; 第二． 然后将这“申请表”通过一个API函数提交给Windows系统（即注册到Windows系统中）。&nbsp;&nbsp;&nbsp; 第三． 如果提交（注册）成功，就说明Window系统通过了你的“申请表”，Windows系统中就有了一份你所申请的窗口类（注：这个注册成功的已经注册在系统中的“申请表”我们称之为窗口类）。这样你就可以利用这个申请成功的窗口类，通过一个专门的API函数让Windows系统创建一个或多个的同一窗口类的窗口。&nbsp;&nbsp;&nbsp; 第四． 创建成功后，我们有了窗口。但是，虽然窗口已存在在内存中，并不一定就马上显示在屏幕上（这根据你的意愿了），所以之后的某时你可以用一个API函数来让Windows系统显示刚才创建的窗口。&nbsp;&nbsp;&nbsp; Window系统就是这样设计的噢！（呵呵，这样设计不算坏，我可以接受。）&nbsp;&nbsp;&nbsp; 以上就是创建一个窗口的大致过程。请记住，在Window系统]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-20 22:16:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第一篇 预备知识]]></title>
		<link>http://blog.pfan.cn/whyhappy/6082.html</link>
		<description><![CDATA[第一篇 预备知识&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;白云小飞1 说在前面&nbsp;&nbsp;&nbsp;&nbsp;由于VC6及MFC的特点，我们许多人从标准C++学习到VC6MFC应用程序的编程学习的过度会有一个很大的夸跃，从而感到非常的吃力。&nbsp;&nbsp;&nbsp;&nbsp;究其原因之一：MFC类库设计虽然精巧，但我们在使用MFC设计程序时，会发现MFC到处是API函数的影子。MFC并没有象Delphi的VCL类库，VB的控件库一样封装得让人几乎完全不用知道还有Win32API函数及其操作原理，所以要想利用VC6的MFC编程，我认为就一定要先学习如何直接用Win32API函数来编程。对API编程中的一些关键的概念和原理要有一定认识，这样才会有一个比较平滑的过渡。以上就是我写这个系列的初衷。2 我假设你已有的知识:&nbsp;&nbsp;&nbsp;&nbsp;这里我假设你已经掌握了如下的知识，如果你在如下方面知识有点不太清楚，那要去补一补罗，否则你看到相关的内容时会有麻烦的。&nbsp;&nbsp;&nbsp;&nbsp;下面说是我对你知识的假设：2.1 Windows系统的文件、文件夹、路径的概念2.2 C语言的基本知识（基本以等级考试二级C语言为准，还要有所扩充）&nbsp;&nbsp;2.2.1 指针的概念。&nbsp;&nbsp;2.2.2 函数指针概念。&nbsp;&nbsp;2.2.3 各种自定义类型(最重要的是struct类型)的概念。&nbsp;&nbsp;2.2.4 要知道函数的各种参数传递形式（值、地址、引用传递）。&nbsp;&nbsp;2.2.5 typedef及其应用。&nbsp;&nbsp;2.2.6 #include及其应用。&nbsp;&nbsp;2.2.7 十进制、二进制、十六进制。&nbsp;&nbsp;2.2.8 按位与、或、非运算的实质。&nbsp;&nbsp;2.2.9 宏定义概念、使用及意义。&nbsp;&nbsp;（每个人总是学完了C或C++语法后才会开始用VC6进行Wind]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-16 12:58:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第二篇 创建Win32工程和主函数]]></title>
		<link>http://blog.pfan.cn/whyhappy/6081.html</link>
		<description><![CDATA[第二篇 创建Win32工程和主函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;白云小飞1 在D:\创建一个空的工程（工程名为MyApp）&nbsp;&nbsp;&nbsp;&nbsp;要编写一个程序，我们就要首先用VC6应用程序向导创建一个工程，下面我将给你创建一个空工程（也就是没有任何源文件及代码的工程）1.1 操作:&nbsp;&nbsp;&nbsp;&nbsp;=&gt;文件-&gt;新建…-&gt;”工程”标签-&gt;位置:”D:\”(你可以设置你想要创建的位置)-&gt;工程名：MyApp(你可以自己指定其它名)-&gt;选择”创建新的工作空间”-&gt;确定-&gt;一个空工程-&gt;完成1.2 请查看指定位置下生成的文件:打开D:\MyApp&nbsp;&nbsp;&nbsp;&nbsp;我们发现，它在D:\下生成了一个MyApp文件夹。&nbsp;&nbsp;&nbsp;&nbsp;并在MyApp文件夹下生成了几个文件，如下：MyApp.dspMyApp.dswMyApp.ncbMyApp.opt&nbsp;&nbsp;&nbsp;&nbsp;其中，MyApp.dsp是项目文件和MyApp.dsw是工作区文件，它们是不能删除。&nbsp;&nbsp;&nbsp;&nbsp;项目文件的作用：生成一个EXE或DLL程序的所有相关源文件、有头文件的位置信息都记录在MyApp.dsp项目文件中。&nbsp;&nbsp;&nbsp;&nbsp;工作区文件的作用：如果一个复杂的软件工程可能是由多个EXE和多个DLL程序组成，这样每个项目文件的位置信息又记录在MyApp.dsw工作区文件中。&nbsp;&nbsp;&nbsp;&nbsp;当然，我们的这个工程只有一个EXE程序，所以只有一个项目，这个项目文件MyApp.dsp也同样要记录在MyApp.dsw中了。&nbsp;&nbsp;&nbsp;&nbsp;MyApp.ncb和MyApp.opt虽删除后会自动生成，但是还是请不要这样做哦！以后我还会说它们的作用。&nbsp;&nbsp;&nbsp;&nbsp;我们下次要编辑源程序]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-16 12:57:00</pubDate>
		</item>
				<item>
		<title><![CDATA[《Win32SDK应用程序》第三篇 增加一个回调函数]]></title>
		<link>http://blog.pfan.cn/whyhappy/6080.html</link>
		<description><![CDATA[第三篇 增加一个回调函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;白云小飞1 请再创建一个函数。LRESULT CALLBACK WinProc(HWND hwnd,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UINT msg,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WPARAM wparam,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LPARAM lparam){&nbsp;&nbsp;//这里可以输入响应消息的代码&nbsp;&nbsp;&nbsp;&nbsp;return 0;}&nbsp;&nbsp;&nbsp;&nbsp;此函数人称回调函数也称自定义窗口过程函数。但其实它与我们一般函数无异，你千万不要把这个函数想得太复杂了啊！&nbsp;&nbsp;&nbsp;&nbsp;记住，函数名WinProc及各参数变量名是可以由你来指定，但是参数类型、个数、顺序、及返回值类型是不能改变的。&nbsp;&nbsp;&nbsp;&nbsp;那么，这个函数是干什么的啊？&nbsp;&nbsp;&nbsp;&nbsp;它是一个用来与某窗口关联的函数。当我们在窗口上的每一个操作，都会调用这个函数。这在个函数里，我们可以写上代码来完成我们在窗口上操作的相应功能。&nbsp;&nbsp;&nbsp;&nbsp;先来看参数部分：&nbsp;&nbsp;&nbsp;&nbsp;UINT msg ：UINT类型不是我们在前面也见过吗？就是unsigned int类型了。每次程序运行时用户在窗口上操作所产生的消息都会通过msg传递进来。msg里保存的值就是我们对窗口操作时产生的消息值（即WM_CLOSE、WM_CHAR、WM_COMMAND、……的值）。&nbsp;&nbsp;&nbsp;&nbsp;HWIND hwnd ：哦！这是我在第一篇中讲过的一个窗口句柄类型的变量。]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-16 12:56:00</pubDate>
		</item>
				<item>
		<title><![CDATA[彻底搞定C指针－函数名与函数指针]]></title>
		<link>http://blog.pfan.cn/whyhappy/6030.html</link>
		<description><![CDATA[&nbsp;函数名与函数指针一 通常的函数调用&nbsp;&nbsp;&nbsp;&nbsp;一个通常的函数调用的例子：//自行包含头文件void MyFun(int x);&nbsp;&nbsp;&nbsp;&nbsp;//此处的申明也可写成：void MyFun( int );int main(int argc, char* argv[]){&nbsp;&nbsp;&nbsp;MyFun(10);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//这里是调用MyFun(10);函数&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;}void MyFun(int x)&nbsp;&nbsp;//这里定义一个MyFun函数{&nbsp;&nbsp;&nbsp;printf(“%d\n”,x);}&nbsp;&nbsp;&nbsp;&nbsp;这个MyFun函数是一个无返回值的函数，它并不完成什么事情。这种调用函数的格式你应该是很熟悉的吧！看主函数中调用MyFun函数的书写格式：MyFun(10);&nbsp;&nbsp;&nbsp;&nbsp;我们一开始只是从功能上或者说从数学意义上理解MyFun这个函数，知道MyFun函数名代表的是一个功能（或是说一段代码）。&nbsp;&nbsp;&nbsp;&nbsp;直到——&nbsp;&nbsp;&nbsp;&nbsp;学习到函数指针概念时。我才不得不在思考：函数名到底又是什么东西呢？&nbsp;&nbsp;&nbsp;&nbsp;（不要以为这是没有什么意义的事噢！呵呵，继续往下看你就知道了。）二 函数指针变量的申明&nbsp;&nbsp;&nbsp;&nbsp;就象某一数据变量的内存地址可以存储在相应的指针变量中一样，函数的首地址也以存储在某个函数指针变量里的。这样，我就可以通过这个函数指针变量来调用所指向的函数了。&nbsp;&nbsp;&nbsp;&nbsp;在C系列语言中，任何一个变量，总是要先申明，之后才能使用的。那么，函数指针变量也应该要先申明吧？那又是如何来申明呢？以上面的例子为例，我来申明一个可以指向MyFun函数的函数指针变量FunP。下面就是申明FunP变量的方法：void (*FunP)(int) ;&nbsp;&nbsp;&nbsp;//也可写成v]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-14 23:35:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C++中获得当前系统时间&nbsp;]]></title>
		<link>http://blog.pfan.cn/whyhappy/6029.html</link>
		<description><![CDATA[//方案— 优点：仅使用C标准库；缺点：只能精确到秒级
#include &lt;time.h&gt; #include &lt;stdio.h&gt; 
int main( void ) { &nbsp;&nbsp;&nbsp; time_t t = time( 0 ); &nbsp;&nbsp;&nbsp; char tmp[64]; &nbsp;&nbsp;&nbsp; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z",localtime(&amp;t) ); &nbsp;&nbsp;&nbsp; puts( tmp ); &nbsp;&nbsp;&nbsp; return 0; }
//方案二 优点：能精确到毫秒级；缺点：使用了windows API 
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; 
int main( void ) { &nbsp;SYSTEMTIME sys; &nbsp;GetLocalTime( &amp;sys ); &nbsp;printf( "%4d/%02d/%02d %02d:%02d:%02d.%03d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds,sys.wDayOfWeek); &nbsp; return 0;}
//方案三,优点：利用系统函数,还能修改系统时间
#include&lt;stdlib.h&gt;#include&lt;iostream&gt;
using namespace std;void main(){&nbsp;&nbsp;&nbsp; system("time");}
//方案四,将当前时间折算为秒级，再通过相应的时间换算即可
#include&lt;iostream&gt;#include&lt;ctime&gt;using namespace std;
int main(){&nbsp;time_t now_time;&nbsp;now_time = time(NULL);&nbsp;cout&lt;&lt;now_ti]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-14 21:55:00</pubDate>
		</item>
				<item>
		<title><![CDATA[彻底搞定C指针－指向另一指针的指针&nbsp;]]></title>
		<link>http://blog.pfan.cn/whyhappy/5790.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指向另一指针的指针一． 回顾指针概念：早在本系列第二篇中我就对指针的实质进行了阐述。今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧！当我们程序如下申明变量：short int i;char a;short int * pi;程序会在内存某地址空间上为各变量开辟空间，如下图所示。内存地址→6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;13&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;14&nbsp;&nbsp;&nbsp;&nbsp;15-------------------------------------------------------------------------------------…&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-06 23:24:00</pubDate>
		</item>
				<item>
		<title><![CDATA[最新新闻:美军进攻北京,惨败!(搞笑篇)]]></title>
		<link>http://blog.pfan.cn/whyhappy/5516.html</link>
		<description><![CDATA[美军参谋长联席会议主席在美国国会所作的总结：这次失败不仅是战略上的失败，更是战术上的失败。 
　　一.我军大意地使用了北京市旅游局的北京旅游图和北京公交公司的北京交通图以及北京地质勘探中心的北京地形图。我们错误的以为中国人给自己用的东西虽然算不上好，但决不会欺骗自己人，然而我们错了。拿到这几张地图的第一天就注定了我们将要在一个错误的时间一个错误的地点和一个错误的国家打一场错误的战争。 
　　1.原本要降落在清华大学的101空降师506团3营被错误的空降到颐和园昆明湖中，会水的投降，不会水的淹死，533人无一逃脱。 
　　2.第十山地师在攻占云冈地区后，按原计划执行破坏中国航空集团第三研究院的命令，一团一营在云冈镇搜索了将近一天也未找到中航集团三院的确切位置，不得以增加部署整个一团加入搜索，使得部队未能完成作战预案。主力部队在度过永定河时，由于空降部队未能按时将舟桥部队运抵，不得以在渡河地点停留了7小时，在舟桥部队到达后才发现所谓的永定河根本没有水。而一团到撤退时才知道他们在航天三院的大院里整整转了四天! 
　　3.陆战三师的重型装甲集群在突破中国守军二十六军阵地后从八达岭高速突入北京市郊，在五环路和八达岭高速交界处遇到在美国前所未见的大堵车，在长达15小时的时间内未能前进一步，被中国人的增援部队击溃。 
　　4.降落在老屯的101师502团伞兵选择小区规划图上绿地、会所、游泳池、湖泊降落。结果当他们落地后发现：他们都落在楼顶上，因为开发商擅自更改规划，把原先承诺的绿地会所游泳池湖泊都起了楼以图多卖点钱。更悲惨的是这些该死的小区规划让倒霉的伞兵伞降着陆时死伤无数。幸存伞兵在楼顶与民兵隔着天窗枪战一宿，大部战死。 
　　5.唯一在四环内空降的101师501团降落在了朝阳公园，那是四环内唯一一片有空地的地方。空降后发现该地区地势崎岖完全称不上空地，空降的重装备无法运出公园，只得放弃原作战计划，固守公园等待救援。他们是本次战役中第一支被成建制俘虏的部队。 
　　6.打巷战时，我们使用的房地产商作为广告宣传的户型图严重失真，所有户型内部空间狭小到了令人恐惧的地步，重型武器均无法运入战前选为要塞的房间；且房屋强度严重不足，无法作为战斗用掩体。 
　　7.特别值得一提的是海豹突击队突袭安贞大厦时，特种部队的小伙子们沿消防通道突击，不想消防通道被物业公司封堵或改做他]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-01 02:00:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C++的iostream标准库介绍(1)]]></title>
		<link>http://blog.pfan.cn/whyhappy/5305.html</link>
		<description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作者：管宁
我们从一开始就一直在利用C++的输入输出在做着各种练习，输入输出是由iostream库提供的，所以讨论此标准库是有必要的，它与C语言的stdio库不同，它从一开始就是用多重继承与虚拟继承实现的面向对象的层次结构，作为一个c++的标准库组件提供给程序员使用。 
　　iostream为内置类型类型对象提供了输入输出支持，同时也支持文件的输入输出，类的设计者可以通过对iostream库的扩展，来支持自定义类型的输入输出操作。
　　为什么说要扩展才能提供支持呢？我们来一个示例。
#include&nbsp;&nbsp; #include&nbsp;&lt;iostream&gt;&nbsp; using&nbsp;namespace&nbsp;std;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; class&nbsp;Test&nbsp; {&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;public:&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test(int&nbsp;a=0,int&nbsp;b=0)&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Test::a=a;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-09-25 13:47:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C++的iostream标准库介绍(2)]]></title>
		<link>http://blog.pfan.cn/whyhappy/5303.html</link>
		<description><![CDATA[接下来我们继续看一下C++风格的串流控制，C++引入了ostringstream、istringstream、stringstream这三个类，要使用他们创建对象就必须包含sstream.h头文件。 
istringstream类用于执行C++风格的串流的输入操作。 　　stringstream类同时可以支持C++风格的串流的输入输出操作。 　　strstream类同时可以支持C风格的串流的输入输出操作。
　　istringstream类是从istream（输入流类）和stringstreambase（c++字符串流基类）派生而来，ostringstream是从ostream（输出流类）和stringstreambase（c++字符串流基类）派生而来，stringstream则是从iostream(输入输出流类)和和stringstreambase（c++字符串流基类）派生而来。 
　　他们的继承关系如下图所示:

　　istringstream是由一个string对象构造而来，istringstream类从一个string对象读取字符。 　　istringstream的构造函数原形如下： 　　istringstream::istringstream(string str); 
//程序作者:管宁&nbsp; //站点:www.cndev-lab.com&nbsp; //所有稿件均有版权,如要转载,请务必著名出处和作者&nbsp; #include&nbsp;&lt;iostream&gt;&nbsp; #include&nbsp;&lt;sstream&gt;&nbsp; using&nbsp;namespace&nbsp;std;&nbsp; int&nbsp;main()&nbsp;&nbsp; {&nbsp; istringstream&nbsp;istr;&nbsp; istr.str("1&nbsp;56.7",);&nbsp; //上述两个过程可以简单写成&nbsp;istringstream&nbsp;istr("1&nbsp;56.7");&nbsp; cout&nbsp;&lt;&lt;&nbsp;istr.str()&lt;]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-09-25 13:41:00</pubDate>
		</item>
				<item>
		<title><![CDATA[C++的iostream标准库介绍(3)]]></title>
		<link>http://blog.pfan.cn/whyhappy/5302.html</link>
		<description><![CDATA[C语言提供了格式化输入输出的方法，C++也同样，但是C++的控制符使用起来更为简单方便，在c++下有两中方法控制格式化输入输出。 　　１.有流对象的成员函数。 　　例如，下列程序以成员函数的方式控制输出的精度: 
//程序作者:管宁&nbsp; //站点:www.cndev-lab.com&nbsp; //所有稿件均有版权,如要转载,请务必著名出处和作者&nbsp; &nbsp; #include&nbsp;&lt;iostream&gt;&nbsp; using&nbsp;namespace&nbsp;std;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; int&nbsp;main()&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;float&nbsp;pi=3.14159f;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;cout&lt;]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-09-25 13:37:00</pubDate>
		</item>
				<item>
		<title><![CDATA[李 敖 语 录]]></title>
		<link>http://blog.pfan.cn/whyhappy/5184.html</link>
		<description><![CDATA[◆小人物与大人物&nbsp;我常常怀疑我是小人物，因为我常常忘记自己是大人物。◆ 衣食足了又如何？「管子」说：「衣食足而知荣辱。」但在国民党统治下，人民已经无耻得「衣食足而不知荣辱」了。 ◆ 无知与写作国民党统治下匹夫匹妇的无知，常常缩小了我的写作范围。 ◆ 蚂蚁 蚂蚁绝不因有食蚁兽就不奋斗。它们永远若无其事，奋斗不懈。 ◆ 斗争敌友 对敌人，要永远斗争；对朋友，要间歇斗争。 ◆ 报仇不能靠上帝上帝给你两只手的意思是：报仇不能靠他，你要亲自动手。 ◆ 激浊而不扬清我在台湾，激浊而不扬清，因为无清可扬。 ◆ 打击魔鬼 我的特色是打击魔鬼，不怕麻烦，是为产品；从麻烦中找银子与乐子，是为副产品。 ◆ 「不知为不知」真义我总觉得孔夫子「不知为不知，是知也」，这句话被人翻错了。正确的翻译应该是：「对不必知道的知识保持继续不知道，才是有知的表现。」◆ 更真与更假新女性妄想比真实更真，结果呢，她比虚伪更假。 ◆ 西施眼里 情人眼里出西施，西施眼里出自己。 ◆ 婚姻看法 女人对婚姻的看法只有一种；男人对婚姻的看法却有一千零一种。◆ 了解与爱男人对女人应多一点爱、少一点了解；女人对男人应多一点了解、少一点爱。◆ 臭皮匠与诸葛亮「叁个臭皮匠，胜过诸葛亮。」在皮革业中和皮鞋店中，这是真理。◆ 独裁与民主之别独裁的统治者是一个人做十个人的工作；民主的统治者是十个人做十个人的工作。 ◆ 「走大路」与「走大陆」国民党以正大光明自居，口号是「开大门，走大路」。其实它是最不敢「开大门」的。一开了大门，「走大路」未成，「走大陆」倒是真的。◆ 富而好「礼」国民党鼓吹「建立一个富而好礼的社会」，其实此「礼」乃礼物之礼也、红包之礼也。 ◆ 喊「狼来了！」「狼来了！」的次数喊得太多的结果是：谁也不相信他，他也不相信他。 ◆ 笨人的可怕处笨人的可怕不在其笨，而在其自作聪明。 ◆ 赢过别人与输了自己 有人只知道赢过别人，不知输了自己。 ◆ 不会自毙 「多行不义必自毙」？我就不信。你要打倒多行不义之人，他才会毙呢！ ◆ 记忆与新鲜 不要因为别人记忆不好就说你的故事新鲜。 ◆ 法律与法官 我相信法律，却怀疑法官。 ◆ 充阔与装穷 穷人充阔，富人装穷，是人间最有趣的对比。 ◆ 又是黑猫又是白猫 邓小平说不管黑猫白猫能抓老鼠就是好猫，但他不知道有一种黑白相间的猫，又是黑猫又是白猫，却是不能抓老鼠的坏猫。这种猫是台湾党外]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-10-27 16:01:00</pubDate>
		</item>
				<item>
		<title><![CDATA[一个很牛的计算pi的c程序]]></title>
		<link>http://blog.pfan.cn/whyhappy/5167.html</link>
		<description><![CDATA[#include &lt;stdlib.h&gt;&nbsp;&nbsp;#include &lt;stdio.h&gt;&nbsp;&nbsp;long a=10000,b,c=2800,d,e,f[2801],g;&nbsp;&nbsp;main()&nbsp;&nbsp;{&nbsp;&nbsp;for(;b-c;)&nbsp;&nbsp;&nbsp;&nbsp;f[b++]=a/5;&nbsp;&nbsp;for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)&nbsp;&nbsp;&nbsp;&nbsp;for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);&nbsp;&nbsp;}&nbsp;&nbsp;计算结果：&nbsp;&nbsp;3141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086513282306647093844609550582231725359408128481117450284102701938521105559644622948954930381964428810975665933446128475648233786783165271201909145648566923460348610454326648213393607260249141273724587006606315588174881520920962829254091715364367892590360011330530548820466521384146951941511609433057270365759591953092186117381932611793105118548074462379962749567351885752724891227938183011949129833673362440656643086021394946395224737190702179860943702770539217176293176752384674818467669405132000568127145263560827785771342]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-09-23 14:29:00</pubDate>
		</item>
				<item>
		<title><![CDATA[彻底搞定C指针－变量的内存实质]]></title>
		<link>http://blog.pfan.cn/whyhappy/5166.html</link>
		<description><![CDATA[一．先来理解C语言中变量的实质要理解C指针，我认为一定要理解C中“变量”的存储实质，所以我就从“变量”这个东西开始讲起吧！先来理解理解内存空间吧！请看下图：内存地址→&nbsp;&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13---------------------------------------------------------------------------- ··· |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|··--------------------------------------------------------------------------- 如图所示，内存只不过是一个存放数据的空间，就好像我的看电影时的电影院中的座位一样。每个座位都要编号，我们的内存要存放各种各样的数据，当然我们要知道我们的这些数据存放在什么位置吧！所以内存也要象座位一样进行编号了，这就是我们所说的内存编址。座位可以是按]]></description>
		<author><![CDATA[whyhappy]]></author>
		<pubDate>2005-09-23 14:21:00</pubDate>
		</item>
		</channel>
</rss>