﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Dragon</title><link>http://www.cppblog.com/dragon/</link><description>Dragon</description><language>zh-cn</language><lastBuildDate>Wed, 08 Apr 2026 11:59:21 GMT</lastBuildDate><pubDate>Wed, 08 Apr 2026 11:59:21 GMT</pubDate><ttl>60</ttl><item><title>关于PostMessage在多线程中的内存释放问题</title><link>http://www.cppblog.com/dragon/archive/2012/08/20/187777.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Mon, 20 Aug 2012 09:12:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2012/08/20/187777.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/187777.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2012/08/20/187777.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/187777.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/187777.html</trackback:ping><description><![CDATA[<p>首先，来分析一个假设的场景：<br />如果PostMessage传递的是一些在栈区的变量，PostMessage后把这些数据传到另一个线程的消息队列里，但<br />由于是栈区上的变量在PostMessage所在函数返回时由系统回收，那么另一线程就会访问不了这些数据。<br /><br /></p>
<p>解决办法：在传送线程PostMessage消息前对栈区上的数据new一份放到堆区上，堆区的数据是程序员手动创<br />建和手动回收的，然后把这些数据传送到另一线程，由另一线程去手动释放delete。<br /><br /></p>
<p>问题的产生：由于工作线程处理的繁忙，有一些数据在UI线程退出时还没返回，当UI线程退出后，数据返回<br />由工作线程PostMessage到UI线程，UI线程已经接收不到消息，故未能手动释放工作线程传过来的堆区内存，<br />造成内存泄漏。<br /><br /></p>
<p>后来，查到如下网站：<br /><a href="http://stackoverflow.com/questions/3807945/mfc-data-forwarding-to-main-thread-via-postmessage">http://stackoverflow.com/questions/3807945/mfc-data-forwarding-to-main-thread-via-postmessage</a><br />发现PostMessage是有返回值的，发送失败返回false。<br /><br /></p>
<p>故上面的问题有了解决方法：<br />UI线程（接收线程）退出后工作线程（发送线程）PostMessage是返回false的，故可以利用这个返回值来决定由哪个线程来释放这段<br />PostMessage中传递的内存，如果传送失败，则由当前PostMessage的线程负责手动回收，如果发送成功就由<br />接收线程来负责手动回收。</p><img src ="http://www.cppblog.com/dragon/aggbug/187777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2012-08-20 17:12 <a href="http://www.cppblog.com/dragon/archive/2012/08/20/187777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>su和sudo命令的使用(转)</title><link>http://www.cppblog.com/dragon/archive/2011/12/15/162156.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Thu, 15 Dec 2011 02:55:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2011/12/15/162156.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/162156.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2011/12/15/162156.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/162156.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/162156.html</trackback:ping><description><![CDATA[<p><font face="Verdana" color="#000000">转自:http://hi.baidu.com/zjg23/blog/item/70bc34378bc46a260a55a908.html<br />（二）SU和SUDO命令</font></p>
<p><font face="Verdana" color="#000000">（1）SU命令用于切换用户，单独的SU等效于SU ROOT，作用都是切换到ROOT用户。</font></p>
<p><font face="Verdana" color="#000000">假设你忘记根用户密码：</font></p>
<p><font face="Verdana" color="#000000">zjg@ubuntu:~$ su<br />密码： <br />su：认证失败</font></p>
<p><font face="Verdana" color="#000000">普通用户无法查看或更改根用户的密码：</font></p>
<p><font face="Verdana" color="#000000">zjg@ubuntu:~$ passwd root</font></p>
<p><font face="Verdana" color="#000000">passwd：您不能查看或更改 root 的密码信息。</font></p>
<p><font face="Verdana" color="#000000">SUDO命令让你在普通用户下执行一些ROOT用户下的命令（如果这个用户有相应的权限的话）<br />加:<br />所以你可以通过sudo来执行passwd命令并修改root用户密码<br />可以看出ROOT的密码和普通用户(你自己创建的用户)密码是两个不一样的密码。</font></p>
<p><font face="Verdana" color="#000000">zjg@ubuntu:~$ sudo passwd root<br />[sudo] password for zjg:&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; ／／输入普通用户zjg的密码<br />输入新的 UNIX 密码： <br />重新输入新的 UNIX 密码： <br />passwd：已成功更新密码</font></p>
<p><font face="Verdana" color="#000000">现在你就可以用新密码切换到根用户了。</font></p><font face="Verdana" color="#000000">
<p><br />zjg@ubuntu:~$ su<br />密码： </p>
<p>root@ubuntu:/home/zjg# </p>
<p>如果普通用户没有相应的权限，用上述方法更改根用户的密码是行不通的。</p>
<p>（2）</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于su 对切换到超级权限用户root后，权限的无限制性，所以su并不能担任多个管理员所管理的系统。如果用su 来切换到超级用户来管理系统，也不能明确哪些工作是由哪个管理员进行的操作。特别是对于的管理有多人参与管理时，最好是针对每个管理员的技术特长和管理范围，并且有针对性的下放给权限，并且约定其使用哪些工具来完成与其相关的工作，这时我们就有必要用到 sudo。<br />　　通过sudo，我们能把某些超级权限有针对性的下放，并且不需要普通用户知道root密码，所以sudo 相对于权限无限制性的su来说，还是比较安全的，所以sudo 也能被称为受限制的su ；另外sudo 是需要授权许可的，所以也被称为授权许可的su；<br />　　sudo 执行命令的流程是当前用户切换到root（或其它指定切换到的用户），然后以root（或其它指定的切换到的用户）身份执行命令，执行完成后，直接退回到当前用户；而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权；</p>
<p></font>&nbsp;</p><img src ="http://www.cppblog.com/dragon/aggbug/162156.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2011-12-15 10:55 <a href="http://www.cppblog.com/dragon/archive/2011/12/15/162156.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>QT4.7.4在ubuntu10.10下的编译(转)</title><link>http://www.cppblog.com/dragon/archive/2011/12/15/162155.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Thu, 15 Dec 2011 02:51:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2011/12/15/162155.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/162155.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2011/12/15/162155.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/162155.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/162155.html</trackback:ping><description><![CDATA[<p><font face="Verdana" color="#000000">转自：<br />http://hi.baidu.com/ugene/blog/item/3154173c1e60850dbba1673a.html<br />http://hi.baidu.com/ugene/blog/item/649595944fb156057af48008.html</font></p>
<p><font face="Verdana" color="#000000">1.下载qt安装包，到http://qt.nokia.com/downloads下载最新的是qt4.7.4，根据安装环境下载，这里是linux环境，因此要下载qt-everywhere-opensource-src-4.7.4.tar.gz (.tar.gz)。</font></p>
<p><font face="Verdana" color="#000000">2.根据需要下载qt creator，在http://qt.nokia.com/downloads都可以找到安装所需要的软件。</font></p>
<p><font face="Verdana" color="#000000">3.将下载下来的qt 4.7.4解压安装：</font></p>
<p><font face="Verdana" color="#000000">(1)cd /tmp</font></p>
<p><font face="Verdana" color="#000000">(2)gunzip qt-everywhere-opensource-src-4.7.4.tar.gz<br />&nbsp;&nbsp; tar xvf qt-everywhere-opensource-src-4.7.4.tar</font></p>
<p><font face="Verdana" color="#000000">(3)cd qt-everywhere-opensource-src-4.7.4</font></p>
<p><font face="Verdana" color="#000000">&nbsp;&nbsp; ./configure</font></p>
<p><font face="Verdana" color="#000000">(4)make (貌似我用了三个钟)<br />(5)su -c "make install"(要用到root密码，故要输入sudo passwd root去修改root的密码)<br />(6)PATH=/usr/local/Trolltech/Qt-4.7.4/bin:$PATH<br />&nbsp;&nbsp; export PATH</font></p><font face="Verdana" color="#000000">
<p><br />4.qt creator的安装，这个推荐下载bin格式的安装包，这个安装比较简单。<br />下载完成后直接运行./qt-creator-linux-x86-opensource-2.4.0.bin安装，就跟windows安装软件一样了，不需要再进行编译之类的了。<br />在./configure这一步会问你安装哪一个版本，一个是open(开源)的，一个是commercial(商用)的，这时选择o，然后还会提示你要不要查看一些东西，没必要，直接输入yes回车！</p>
<p>遇到问题:</p>
<p>1.make: g++: Command not found<br />make: *** [project.o] Error 127</p>
<p>针对这个问题是因为g++没有安装，通过sudo apt-get install g++安装。</p>
<p>如有必要还要安装sudo apt-get install build-essential(这个是依赖g++的，装了这个就也把g++装好了)</p>
<p>安装完g++后再次运行./configure即可。</p>
<p>2.在安装g++完成后再次运行./configure后不会再报未发现g++之类的错误，可是又出现了</p>
<p>"Basic XLib functionality test failed!&#8221;</p>
<p>对于这个错误时因为没有安装xlib库造成的，安装即可解决。</p>
<p>首先：sudo apt-get install libx11-dev libfreetype6-dev libavahi-gobject-dev libSM-dev libXrender-dev libfontconfig-dev libXext-dev</p>
<p>然后：sudo apt-get install build-essential(在前面装了后，在这里我就不用装了)</p>
<p>安装完后再次运行./configure，即可顺利安装。</p>
<p>3.在./configure完成后会出现</p>
<p>To reconfigure, run 'gmake confclean' and 'configure'.</p>
<p>Qt is now configured for building. Just run 'gmake'.<br />Once everything is built, you must run 'gmake install'.<br />Qt will be installed into /usr/local/Trolltech/Qt-4.7.4</p>
<p>开始吓我一跳，以为又出错了呢，后来一看，没有出错，是提示如果再次./configure该怎么办以及下一步该怎么办的。</p>
<p><br />没什么问题就下一步make了，这一步时间会相当长，要有耐心啊。</font></p><img src ="http://www.cppblog.com/dragon/aggbug/162155.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2011-12-15 10:51 <a href="http://www.cppblog.com/dragon/archive/2011/12/15/162155.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>offset(type,member)的探讨</title><link>http://www.cppblog.com/dragon/archive/2011/01/01/137828.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Sat, 01 Jan 2011 03:00:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2011/01/01/137828.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/137828.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2011/01/01/137828.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/137828.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/137828.html</trackback:ping><description><![CDATA[<p>这代码是参照别人的文章写的，只供自己理解用，有兴趣的也可以看看。<br>地址：<a href="http://eulertao.ycool.com/post.1762422.html">http://eulertao.ycool.com/post.1762422.html</a><br>#include &lt;cstdlib&gt;<br>#include &lt;iostream&gt;<br>using namespace std;<br>#define offset(type,member) ((int)&amp;(((type*)0)-&gt;member))<br>/*<br>即假设0地址是s类型的一个实例，则成员变量m的地址应该是？<br>应为起始地址是0，所以求出的地址也就可以直接看作是偏移量<br>*/<br>typedef void func(char *);</p>
<p>typedef struct mystu<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char * str;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; func * f;<br>}mystu_t;</p>
<p>void print(char * str)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp; printf("[%s]\n",str);<br>}</p>
<p>int main(int argc, char *argv[])<br>{<br>&nbsp;&nbsp;&nbsp; mystu_t t;<br>&nbsp;&nbsp;&nbsp; t.str="This is a expriment";<br>&nbsp;&nbsp;&nbsp; t.f=print;<br>&nbsp;&nbsp;&nbsp; int offs=offset(mystu_t,f);<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; printf("&amp;t=0x%x &amp;t.f=0x%x offset=%d t.f=0x%x &amp;print=0x%x\n",&amp;t,&amp;t.f,offs,t.f,&amp;print);<br>&nbsp;&nbsp;&nbsp; //t.f是函数在内存的实际地址，而&amp;(t.f)是t中保存这个函数地址的地址。<br>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;t-------&gt; -------------- 地址 --&gt;0x22ff70 在我编译平台&amp;t为:0x22ff70<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |内容 --&gt;"This is a expriment"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;t.f-----&gt; -------------- 地址 --&gt;0x22ff74 在我编译平台&amp;t.f为:0x22ff74<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; func*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |内容 --&gt;0x401390 是t.f(print)的实际地址,在我编译平台t.f为:0x401390 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --------------<br>&nbsp;&nbsp;&nbsp;&nbsp; */ <br>&nbsp;&nbsp;&nbsp; func * f1=*(func**)(((int)&amp;t)+offs);//t+offs是t.f的地址,那就是func * 的地址 ，int起以转值的作用 <br>&nbsp;&nbsp;&nbsp; /*<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;t-----------------&gt; -------------- 地址 --&gt;0x22ff70 在我编译平台&amp;t为:0x22ff70<br>&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; char*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |内容 --&gt;"This is a expriment"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((int)&amp;t)+offs-----&gt; -------------- 地址 --&gt;0x22ff74 在我编译平台&amp;t.f为:0x22ff74<br>&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; func*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |内容 --&gt;0x401390 是t.f(print)的实际地址,在我编译平台t.f为:0x401390 <br>&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; --------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以看出 ((int)&amp;t)+offs就是保存print地址的地址，但编译器不能直接用*对它取值，<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们知道了它是print地址的地址后，就可以将它强制转换成func **,然后对它取值，就是func * <br>&nbsp;&nbsp;&nbsp;&nbsp; */<br>&nbsp;&nbsp;&nbsp; printf("real func addr = 0x%x\n", f1);<br>&nbsp;&nbsp;&nbsp; f1(t.str);<br>&nbsp;&nbsp;&nbsp; system("PAUSE");<br>&nbsp;&nbsp;&nbsp; return EXIT_SUCCESS;<br>}<br>文件在这里，下载来看比较清楚：<br><a title=代码文件 href="http://www.cppblog.com/Files/dragon/main.rar">代码文件</a></p>
<img src ="http://www.cppblog.com/dragon/aggbug/137828.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2011-01-01 11:00 <a href="http://www.cppblog.com/dragon/archive/2011/01/01/137828.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Base64加密解密从Live555中提取(C++)</title><link>http://www.cppblog.com/dragon/archive/2010/12/14/136375.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Tue, 14 Dec 2010 06:10:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/12/14/136375.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/136375.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/12/14/136375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/136375.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/136375.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: /**//*&nbsp;*Base64Coder.h&nbsp;*/#ifndef&nbsp;BASE64CODER_H#define&nbsp;BASE64CODER_H#include&nbsp;&lt;string.h&gt;#ifdef&nbsp;&nbsp;&nbsp;__BORLANDC__#define&nbsp;Boolean&nbsp;bool#define&nbsp;False...&nbsp;&nbsp;<a href='http://www.cppblog.com/dragon/archive/2010/12/14/136375.html'>阅读全文</a><img src ="http://www.cppblog.com/dragon/aggbug/136375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-12-14 14:10 <a href="http://www.cppblog.com/dragon/archive/2010/12/14/136375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成员函数指针是否用typedef的区别</title><link>http://www.cppblog.com/dragon/archive/2010/12/02/135256.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Thu, 02 Dec 2010 03:35:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/12/02/135256.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/135256.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/12/02/135256.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/135256.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/135256.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_42_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_42_Open_Text.style.display='none'; Codehighlighter1_0_42_Closed_Image.style.display='inline'; Codehighlighter1_0_42_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_42_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_42_Closed_Text.style.display='none'; Codehighlighter1_0_42_Open_Image.style.display='inline'; Codehighlighter1_0_42_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_42_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_42_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*测试成员函数指针的小程序,有typedef与没有typedef的区别<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Test<br><img id=Codehighlighter1_97_373_Open_Image onclick="this.style.display='none'; Codehighlighter1_97_373_Open_Text.style.display='none'; Codehighlighter1_97_373_Closed_Image.style.display='inline'; Codehighlighter1_97_373_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_97_373_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_97_373_Closed_Text.style.display='none'; Codehighlighter1_97_373_Open_Image.style.display='inline'; Codehighlighter1_97_373_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_97_373_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_97_373_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_148_157_Open_Image onclick="this.style.display='none'; Codehighlighter1_148_157_Open_Text.style.display='none'; Codehighlighter1_148_157_Closed_Image.style.display='inline'; Codehighlighter1_148_157_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_148_157_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_148_157_Closed_Text.style.display='none'; Codehighlighter1_148_157_Open_Image.style.display='inline'; Codehighlighter1_148_157_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add5()</span><span id=Codehighlighter1_148_157_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_148_157_Open_Text><span style="COLOR: #000000">{&nbsp;res</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_171_180_Open_Image onclick="this.style.display='none'; Codehighlighter1_171_180_Open_Text.style.display='none'; Codehighlighter1_171_180_Closed_Image.style.display='inline'; Codehighlighter1_171_180_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_171_180_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_171_180_Closed_Text.style.display='none'; Codehighlighter1_171_180_Open_Image.style.display='inline'; Codehighlighter1_171_180_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add6()</span><span id=Codehighlighter1_171_180_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_171_180_Open_Text><span style="COLOR: #000000">{&nbsp;res</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;typedef&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;(Test::</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">add_5)();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">现在add_5是一个类型了</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;add_5&nbsp;p_add_5;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">p_add_5才是一个函数指针</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;(Test::</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">add_6)();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">现在add_6是一个函数指针变量</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;DoAddAction();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Display();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;res;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Test::Test()<br><img id=Codehighlighter1_391_473_Open_Image onclick="this.style.display='none'; Codehighlighter1_391_473_Open_Text.style.display='none'; Codehighlighter1_391_473_Closed_Image.style.display='inline'; Codehighlighter1_391_473_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_391_473_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_391_473_Closed_Text.style.display='none'; Codehighlighter1_391_473_Open_Image.style.display='inline'; Codehighlighter1_391_473_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_391_473_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_391_473_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;p_add_5</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">Test::add5;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意这里的写法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;add_6</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">Test::add6;&nbsp;&nbsp;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">无论在类外还是类内，这个&amp;都不能少</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Test::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test()<br><img id=Codehighlighter1_490_493_Open_Image onclick="this.style.display='none'; Codehighlighter1_490_493_Open_Text.style.display='none'; Codehighlighter1_490_493_Closed_Image.style.display='inline'; Codehighlighter1_490_493_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_490_493_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_490_493_Closed_Text.style.display='none'; Codehighlighter1_490_493_Open_Image.style.display='inline'; Codehighlighter1_490_493_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_490_493_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_490_493_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test::DoAddAction()<br><img id=Codehighlighter1_521_592_Open_Image onclick="this.style.display='none'; Codehighlighter1_521_592_Open_Text.style.display='none'; Codehighlighter1_521_592_Closed_Image.style.display='inline'; Codehighlighter1_521_592_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_521_592_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_521_592_Closed_Text.style.display='none'; Codehighlighter1_521_592_Open_Image.style.display='inline'; Codehighlighter1_521_592_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_521_592_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_521_592_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;*</span><span style="COLOR: #000000">p_add_5)();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用类成员函数指针必须有&#8220;-&gt;*&#8221;或&#8220;.*&#8221;的调用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;*</span><span style="COLOR: #000000">add_6)();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test::Display()<br><img id=Codehighlighter1_616_651_Open_Image onclick="this.style.display='none'; Codehighlighter1_616_651_Open_Text.style.display='none'; Codehighlighter1_616_651_Closed_Image.style.display='inline'; Codehighlighter1_616_651_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_616_651_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_616_651_Closed_Text.style.display='none'; Codehighlighter1_616_651_Open_Image.style.display='inline'; Codehighlighter1_616_651_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_616_651_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_616_651_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;res&nbsp;is:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">res</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_665_757_Open_Image onclick="this.style.display='none'; Codehighlighter1_665_757_Open_Text.style.display='none'; Codehighlighter1_665_757_Closed_Image.style.display='inline'; Codehighlighter1_665_757_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_665_757_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_665_757_Closed_Text.style.display='none'; Codehighlighter1_665_757_Open_Image.style.display='inline'; Codehighlighter1_665_757_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_665_757_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_665_757_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;test</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">DoAddAction();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Display();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;test;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/dragon/aggbug/135256.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-12-02 11:35 <a href="http://www.cppblog.com/dragon/archive/2010/12/02/135256.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>成员函数指针数组</title><link>http://www.cppblog.com/dragon/archive/2010/12/02/135250.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Thu, 02 Dec 2010 03:04:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/12/02/135250.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/135250.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/12/02/135250.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/135250.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/135250.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_22_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_22_Open_Text.style.display='none'; Codehighlighter1_0_22_Closed_Image.style.display='inline'; Codehighlighter1_0_22_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_22_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_22_Closed_Text.style.display='none'; Codehighlighter1_0_22_Open_Image.style.display='inline'; Codehighlighter1_0_22_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_22_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_22_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*测试成员函数指针数组的小程序<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;Test<br><img id=Codehighlighter1_77_288_Open_Image onclick="this.style.display='none'; Codehighlighter1_77_288_Open_Text.style.display='none'; Codehighlighter1_77_288_Closed_Image.style.display='inline'; Codehighlighter1_77_288_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_77_288_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_288_Closed_Text.style.display='none'; Codehighlighter1_77_288_Open_Image.style.display='inline'; Codehighlighter1_77_288_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_77_288_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_77_288_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img id=Codehighlighter1_128_137_Open_Image onclick="this.style.display='none'; Codehighlighter1_128_137_Open_Text.style.display='none'; Codehighlighter1_128_137_Closed_Image.style.display='inline'; Codehighlighter1_128_137_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_128_137_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_128_137_Closed_Text.style.display='none'; Codehighlighter1_128_137_Open_Image.style.display='inline'; Codehighlighter1_128_137_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add5()</span><span id=Codehighlighter1_128_137_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_128_137_Open_Text><span style="COLOR: #000000">{&nbsp;res</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">;}</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_151_160_Open_Image onclick="this.style.display='none'; Codehighlighter1_151_160_Open_Text.style.display='none'; Codehighlighter1_151_160_Closed_Image.style.display='inline'; Codehighlighter1_151_160_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_151_160_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_151_160_Closed_Text.style.display='none'; Codehighlighter1_151_160_Open_Image.style.display='inline'; Codehighlighter1_151_160_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;add6()</span><span id=Codehighlighter1_151_160_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_151_160_Open_Text><span style="COLOR: #000000">{&nbsp;res</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;(Test::</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">add[</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">])();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">这个2至关重要，在VC下没写会报错，但在QT里没报，但析构时出错！</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;DoAddAction();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Display();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000">:<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;res;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Test::Test()<br><img id=Codehighlighter1_306_367_Open_Image onclick="this.style.display='none'; Codehighlighter1_306_367_Open_Text.style.display='none'; Codehighlighter1_306_367_Closed_Image.style.display='inline'; Codehighlighter1_306_367_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_306_367_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_306_367_Closed_Text.style.display='none'; Codehighlighter1_306_367_Open_Image.style.display='inline'; Codehighlighter1_306_367_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_306_367_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_306_367_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;add[</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">Test::add5;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">注意这里的写法</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;add[</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=&amp;</span><span style="COLOR: #000000">Test::add6;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;res</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>Test::</span><span style="COLOR: #000000">~</span><span style="COLOR: #000000">Test()<br><img id=Codehighlighter1_384_387_Open_Image onclick="this.style.display='none'; Codehighlighter1_384_387_Open_Text.style.display='none'; Codehighlighter1_384_387_Closed_Image.style.display='inline'; Codehighlighter1_384_387_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_384_387_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_384_387_Closed_Text.style.display='none'; Codehighlighter1_384_387_Open_Image.style.display='inline'; Codehighlighter1_384_387_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_384_387_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_384_387_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test::DoAddAction()<br><img id=Codehighlighter1_415_494_Open_Image onclick="this.style.display='none'; Codehighlighter1_415_494_Open_Text.style.display='none'; Codehighlighter1_415_494_Closed_Image.style.display='inline'; Codehighlighter1_415_494_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_415_494_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_415_494_Closed_Text.style.display='none'; Codehighlighter1_415_494_Open_Image.style.display='inline'; Codehighlighter1_415_494_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_415_494_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_415_494_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_441_492_Open_Image onclick="this.style.display='none'; Codehighlighter1_441_492_Open_Text.style.display='none'; Codehighlighter1_441_492_Closed_Image.style.display='inline'; Codehighlighter1_441_492_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_441_492_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_441_492_Closed_Text.style.display='none'; Codehighlighter1_441_492_Open_Image.style.display='inline'; Codehighlighter1_441_492_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_441_492_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_441_492_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">-&gt;*</span><span style="COLOR: #000000">add[i])();</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">使用类成员函数指针必须有&#8220;-&gt;*&#8221;或&#8220;.*&#8221;的调用</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;Test::Display()<br><img id=Codehighlighter1_518_553_Open_Image onclick="this.style.display='none'; Codehighlighter1_518_553_Open_Text.style.display='none'; Codehighlighter1_518_553_Closed_Image.style.display='inline'; Codehighlighter1_518_553_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_518_553_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_518_553_Closed_Text.style.display='none'; Codehighlighter1_518_553_Open_Image.style.display='inline'; Codehighlighter1_518_553_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_518_553_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_518_553_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;res&nbsp;is:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">res</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_567_659_Open_Image onclick="this.style.display='none'; Codehighlighter1_567_659_Open_Text.style.display='none'; Codehighlighter1_567_659_Closed_Image.style.display='inline'; Codehighlighter1_567_659_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_567_659_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_567_659_Closed_Text.style.display='none'; Codehighlighter1_567_659_Open_Image.style.display='inline'; Codehighlighter1_567_659_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_567_659_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_567_659_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;Test&nbsp;</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;test</span><span style="COLOR: #000000">=</span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000">&nbsp;Test();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">DoAddAction();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;test</span><span style="COLOR: #000000">-&gt;</span><span style="COLOR: #000000">Display();<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;delete&nbsp;test;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/dragon/aggbug/135250.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-12-02 11:04 <a href="http://www.cppblog.com/dragon/archive/2010/12/02/135250.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>电脑玩猜数字游戏</title><link>http://www.cppblog.com/dragon/archive/2010/12/02/135242.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Thu, 02 Dec 2010 02:19:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/12/02/135242.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/135242.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/12/02/135242.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/135242.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/135242.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_35_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_35_Open_Text.style.display='none'; Codehighlighter1_0_35_Closed_Image.style.display='inline'; Codehighlighter1_0_35_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_35_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_35_Closed_Text.style.display='none'; Codehighlighter1_0_35_Open_Image.style.display='inline'; Codehighlighter1_0_35_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_35_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_35_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*在1到100的范围内输入一个数，电脑就会玩猜数字游戏了<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdlib.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">stdio.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">time.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">#define</span><span style="COLOR: #000000">&nbsp;getrandom(&nbsp;min,&nbsp;max&nbsp;)&nbsp;((rand()&nbsp;%&nbsp;(int)(((max)&nbsp;+&nbsp;1)&nbsp;-&nbsp;(min)))&nbsp;+&nbsp;(min))</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">&nbsp;main()<br><img id=Codehighlighter1_181_820_Open_Image onclick="this.style.display='none'; Codehighlighter1_181_820_Open_Text.style.display='none'; Codehighlighter1_181_820_Closed_Image.style.display='inline'; Codehighlighter1_181_820_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_181_820_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_181_820_Closed_Text.style.display='none'; Codehighlighter1_181_820_Open_Image.style.display='inline'; Codehighlighter1_181_820_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_181_820_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_181_820_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;num,num1,num2,num3;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;srand((</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">)time(NULL));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">please&nbsp;int&nbsp;a&nbsp;num&nbsp;from&nbsp;1~100:</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;scanf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">%d</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">&amp;</span><span style="COLOR: #000000">num);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;num1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;num2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">100</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_324_816_Open_Image onclick="this.style.display='none'; Codehighlighter1_324_816_Open_Text.style.display='none'; Codehighlighter1_324_816_Closed_Image.style.display='inline'; Codehighlighter1_324_816_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_324_816_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_324_816_Closed_Text.style.display='none'; Codehighlighter1_324_816_Open_Image.style.display='inline'; Codehighlighter1_324_816_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_324_816_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_324_816_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num3</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">getrandom(num1,num2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(num</span><span style="COLOR: #000000">==</span><span style="COLOR: #000000">num3)<br><img id=Codehighlighter1_373_468_Open_Image onclick="this.style.display='none'; Codehighlighter1_373_468_Open_Text.style.display='none'; Codehighlighter1_373_468_Closed_Image.style.display='inline'; Codehighlighter1_373_468_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_373_468_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_373_468_Closed_Text.style.display='none'; Codehighlighter1_373_468_Open_Image.style.display='inline'; Codehighlighter1_373_468_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_373_468_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_373_468_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">\n\nAHA!!You&nbsp;are&nbsp;right!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">The&nbsp;number&nbsp;is&nbsp;%d\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,num);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">break</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(num</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">num3)<br><img id=Codehighlighter1_492_640_Open_Image onclick="this.style.display='none'; Codehighlighter1_492_640_Open_Text.style.display='none'; Codehighlighter1_492_640_Closed_Image.style.display='inline'; Codehighlighter1_492_640_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_492_640_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_492_640_Closed_Text.style.display='none'; Codehighlighter1_492_640_Open_Image.style.display='inline'; Codehighlighter1_492_640_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_492_640_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_492_640_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">your&nbsp;number&nbsp;%d&nbsp;is&nbsp;bigger&nbsp;than&nbsp;the&nbsp;answer!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,num3);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">please&nbsp;input&nbsp;another&nbsp;num(%d&nbsp;-&nbsp;%d):\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,num1,num3</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num2</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">num3</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(num</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">num3)<br><img id=Codehighlighter1_664_813_Open_Image onclick="this.style.display='none'; Codehighlighter1_664_813_Open_Text.style.display='none'; Codehighlighter1_664_813_Closed_Image.style.display='inline'; Codehighlighter1_664_813_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_664_813_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_664_813_Closed_Text.style.display='none'; Codehighlighter1_664_813_Open_Image.style.display='inline'; Codehighlighter1_664_813_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_664_813_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_664_813_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">your&nbsp;number&nbsp;%d&nbsp;is&nbsp;smaller&nbsp;than&nbsp;the&nbsp;answer!\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,num3);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">please&nbsp;input&nbsp;another&nbsp;num(%d&nbsp;-&nbsp;%d):\n</span><span style="COLOR: #000000">"</span><span style="COLOR: #000000">,num3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,num2);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;num1</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">num3</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/dragon/aggbug/135242.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-12-02 10:19 <a href="http://www.cppblog.com/dragon/archive/2010/12/02/135242.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从身份证前十七位算出第十八位</title><link>http://www.cppblog.com/dragon/archive/2010/12/01/135135.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Wed, 01 Dec 2010 02:32:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/12/01/135135.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/135135.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/12/01/135135.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/135135.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/135135.html</trackback:ping><description><![CDATA[<p>&nbsp;</p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Codehighlighter1_0_32_Open_Image onclick="this.style.display='none'; Codehighlighter1_0_32_Open_Text.style.display='none'; Codehighlighter1_0_32_Closed_Image.style.display='inline'; Codehighlighter1_0_32_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_0_32_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_0_32_Closed_Text.style.display='none'; Codehighlighter1_0_32_Open_Image.style.display='inline'; Codehighlighter1_0_32_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top><span id=Codehighlighter1_0_32_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">/**/</span><span id=Codehighlighter1_0_32_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;*此小程序是连续输入身份证前面的十七位得到最后一位<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>&nbsp;</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">iostream</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top>#include</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">using</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">namespace</span><span style="COLOR: #000000">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;main()&nbsp;<br><img id=Codehighlighter1_104_426_Open_Image onclick="this.style.display='none'; Codehighlighter1_104_426_Open_Text.style.display='none'; Codehighlighter1_104_426_Closed_Image.style.display='inline'; Codehighlighter1_104_426_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_104_426_Closed_Image style="DISPLAY: none; WIDTH: 11px; HEIGHT: 16px" onclick="this.style.display='none'; Codehighlighter1_104_426_Closed_Text.style.display='none'; Codehighlighter1_104_426_Open_Image.style.display='inline'; Codehighlighter1_104_426_Open_Text.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top></span><span id=Codehighlighter1_104_426_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_104_426_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">string</span><span style="COLOR: #000000">&nbsp;id_17;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cin</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">id_17;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img id=Codehighlighter1_155_191_Open_Image onclick="this.style.display='none'; Codehighlighter1_155_191_Open_Text.style.display='none'; Codehighlighter1_155_191_Closed_Image.style.display='inline'; Codehighlighter1_155_191_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_155_191_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_155_191_Closed_Text.style.display='none'; Codehighlighter1_155_191_Open_Image.style.display='inline'; Codehighlighter1_155_191_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;a[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span id=Codehighlighter1_155_191_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_155_191_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;b[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">];<br><img id=Codehighlighter1_218_262_Open_Image onclick="this.style.display='none'; Codehighlighter1_218_262_Open_Text.style.display='none'; Codehighlighter1_218_262_Closed_Image.style.display='inline'; Codehighlighter1_218_262_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_218_262_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_218_262_Closed_Text.style.display='none'; Codehighlighter1_218_262_Open_Image.style.display='inline'; Codehighlighter1_218_262_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000">&nbsp;c[</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">=</span><span id=Codehighlighter1_218_262_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_218_262_Open_Text><span style="COLOR: #000000">{</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">X</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">9</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">8</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">7</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">6</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">5</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">4</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">3</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">,</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">}</span></span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">while</span><span style="COLOR: #000000">(id_17[i]</span><span style="COLOR: #000000">!=</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">\0</span><span style="COLOR: #000000">'</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_290_320_Open_Image onclick="this.style.display='none'; Codehighlighter1_290_320_Open_Text.style.display='none'; Codehighlighter1_290_320_Closed_Image.style.display='inline'; Codehighlighter1_290_320_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_290_320_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_290_320_Closed_Text.style.display='none'; Codehighlighter1_290_320_Open_Image.style.display='inline'; Codehighlighter1_290_320_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_290_320_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_290_320_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;b[i]</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">id_17[i]</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">48</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;result</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">17</span><span style="COLOR: #000000">;j</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">)<br><img id=Codehighlighter1_362_386_Open_Image onclick="this.style.display='none'; Codehighlighter1_362_386_Open_Text.style.display='none'; Codehighlighter1_362_386_Closed_Image.style.display='inline'; Codehighlighter1_362_386_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align=top><img id=Codehighlighter1_362_386_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_362_386_Closed_Text.style.display='none'; Codehighlighter1_362_386_Open_Image.style.display='inline'; Codehighlighter1_362_386_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span id=Codehighlighter1_362_386_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_362_386_Open_Text><span style="COLOR: #000000">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result</span><span style="COLOR: #000000">+=</span><span style="COLOR: #000000">a[j]</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">b[j];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="COLOR: #000000"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">c[result</span><span style="COLOR: #000000">%</span><span style="COLOR: #000000">11</span><span style="COLOR: #000000">]</span><span style="COLOR: #000000">&lt;&lt;</span><span style="COLOR: #000000">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></div>
<img src ="http://www.cppblog.com/dragon/aggbug/135135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-12-01 10:32 <a href="http://www.cppblog.com/dragon/archive/2010/12/01/135135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>NDK使用FFMPEG写的Android测试程序</title><link>http://www.cppblog.com/dragon/archive/2010/10/22/130914.html</link><dc:creator>Dragon</dc:creator><author>Dragon</author><pubDate>Fri, 22 Oct 2010 10:13:00 GMT</pubDate><guid>http://www.cppblog.com/dragon/archive/2010/10/22/130914.html</guid><wfw:comment>http://www.cppblog.com/dragon/comments/130914.html</wfw:comment><comments>http://www.cppblog.com/dragon/archive/2010/10/22/130914.html#Feedback</comments><slash:comments>17</slash:comments><wfw:commentRss>http://www.cppblog.com/dragon/comments/commentRss/130914.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dragon/services/trackbacks/130914.html</trackback:ping><description><![CDATA[&nbsp;
<p><span>就以网上的那个《</span><span>FFMPEG</span><span>解码流程》中的例子来讲吧！</span></p>
<p><span>环境说明：在</span><span>Windows</span><span>下安装了</span><span>Cygwin<st1:chsdate w:st="on" IsROCDate="False" IsLunarDate="False" Day="30" Month="12" Year="1899">1.7.6</st1:chsdate></span><span>版本。</span></p>
<p><span>我的</span><span>NDK</span><span>安装目录是：</span><span>c:\cygwin\home\Dragon\Android\android-ndk-r4b</span></p>
<p><span>在</span><span>Cygwin</span><span>设置了环境变量</span><span>:</span></p>
<p><span>NDK_ROOT=~/Android/android-ndk-r4b</span></p>
<p><span>export NDK_ROOT</span></p>
<p>&nbsp;</p>
<p><span><span>1．&nbsp;</span></span><span>在</span><span>c:\cygwin\home\Dragon\Android\android-ndk-r4b\samples\</span><span>创建一个文件夹，命名为</span><span>Test</span></p>
<p><span>在里面再创建一个文件夹</span><span>jni</span><span>，在</span><span>jni</span><span>我们必须有这四个：</span></p>
<p><span><span>（1）<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>源码：</span><span>main.c</span></p>
<p><span><span>（2）<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Ffmpeg0.6</span><span>源码，文件名</span><span>ffmpeg</span></p>
<p><span><span>（3）<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>Android.mk</span></p>
<p><span><span>（4）<span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span>so</span><span>文件夹，里面放好了编译好的</span><span>lib*.so</span><span>文件</span></p>
<p><span>&nbsp;<span>&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span>除了</span><span>FFMPEG</span><span>源码，这些文件我已经放到</span><span>CSDN</span><span>下载了。下载地址：</span></p>
<p><span><span>&nbsp;&nbsp;&nbsp; <a href="http://download.csdn.net/source/2776066">http://download.csdn.net/source/2776066</a></span></span></p>
<p><span>2.</span><span>然后启动</span><span>cygwin</span><span>：</span></p>
<p><span>$ cd $NDK_ROOT</span></p>
<p><span>$ ndk-build NDK_PROJECT_PATH=$NDK_ROOT/samples/Test</span></p>
<p><span>就会产生一个在</span><span>Test\libs\armeabi\Test</span></p>
<p>&nbsp;</p>
<p><span>运行</span><span>Android</span><span>虚拟机，我的是</span><span>2.2</span><span>版本。</span></p>
<p><span>把所有用到的</span><span>SO</span><span>文件</span><span>adb push </span><span>到</span><span>/system/lib/</span></p>
<p><span>把</span><span>Test</span><span>文件</span><span>adb push </span><span>到</span><span> /system/bin/</span></p>
<p><span>把要测试的文件</span><span>clock.avi</span><span>也</span><span>adb push </span><span>到</span><span>/system/bin/</span></p>
<p><span>adb shell </span><span>进入到</span><span>Android</span><span>虚拟机。</span></p>
<p>&nbsp;</p>
<p><span># cd /system/bin/</span></p>
<p><span># chmod 777 Test</span></p>
<p><span># Test clock.avi</span></p>
<p>&nbsp;</p>
<span>只要我们修改</span><span>.c</span><span>文件和</span><span>Android.mk</span><span>文件我们就可以编写</span><span>jni </span><span>的</span><span>native</span><span>方法生成</span><span>SO</span><span>文件给</span><span>JAVA</span><span>调用，当你调试时如果你的</span><span>JAVA</span><span>程序调用</span><span>SO</span><span>文件时一定要把</span><span>ffmpeg</span><span>里用到的</span><span>SO</span><span>文件上传到</span><span>/system/lib/</span><span>不然调试不了。</span>
<img src ="http://www.cppblog.com/dragon/aggbug/130914.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dragon/" target="_blank">Dragon</a> 2010-10-22 18:13 <a href="http://www.cppblog.com/dragon/archive/2010/10/22/130914.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>