??xml version="1.0" encoding="utf-8" standalone="yes"?>色欲久久久天天天综合网精品,国产香蕉97碰碰久久人人,久久天天躁狠狠躁夜夜avapphttp://www.shnenglu.com/zzh/category/3739.htmlXiao.Zhu C++zh-cnSun, 25 May 2008 11:13:18 GMTSun, 25 May 2008 11:13:18 GMT60内存?MemPool)http://www.shnenglu.com/zzh/articles/19616.htmlXiao.ZhuXiao.ZhuMon, 12 Mar 2007 02:57:00 GMThttp://www.shnenglu.com/zzh/articles/19616.htmlhttp://www.shnenglu.com/zzh/comments/19616.htmlhttp://www.shnenglu.com/zzh/articles/19616.html#Feedback0http://www.shnenglu.com/zzh/comments/commentRss/19616.htmlhttp://www.shnenglu.com/zzh/services/trackbacks/19616.html
狼注:上次也写了一个简单的内存池,是用STL的deque来管理的Q实现v来比较简单,不过有个~点是只能固定分配大小Q所以需要根据经验g先分配内存大,然后把内存再ơ划分ؓ{大的小的内存供使用?br />概述

内存池(MemPoolQ技术备受推崇。我用google搜烦了下Q没有找到比较详l的原理性的文章Q故此补充一个。另外,补充了boost::poollg与经典MemPool的差异。同时也描述了MemPool在sgi-stl/stlport中的q用?br />
 
l典的内存池技?br /> 
l典的内存池QMemPoolQ技术,是一U用于分配大量大相同的对象的技术。通过该技术可以极大加快内存分?释放q程。下面我们详l解释其中的奥妙?br /> 
l典的内存池只涉及两个常量:MemBlockSize、ItemSizeQ小对象的大,但不能小于指针的大小Q在32位^C是不能于4字节Q,以及两个指针变量MemBlockHeader、FreeNodeHeader。开始,q两个指针均为空?br /> 
class MemPool
{
private:
    const int m_nMemBlockSize;
    const int m_nItemSize;

    struct _FreeNode {
        _FreeNode* pPrev;
        BYTE data[m_nItemSize - sizeof(_FreeNode*)];
    };

    struct _MemBlock {
        _MemBlock* pPrev;
        _FreeNode data[m_nMemBlockSize/m_nItemSize];
    };
  
    _MemBlock* m_pMemBlockHeader;
    _FreeNode* m_pFreeNodeHeader;
 
public:
   MemPool(int nItemSize, int nMemBlockSize = 2048)
       : m_nItemSize(nItemSize), m_nMemBlockSize(nMemBlockSize),
         m_pMemBlockHeader(NULL), m_pFreeNodeHeader(NULL)
   {
   }
};
 
其中指针变量MemBlockHeader是把所有申L内存块(MemBlockQ串成一个链表,以便通过它可以释放所有申L内存。FreeNodeHeader变量则是把所有自由内存结点(FreeNodeQ串成一个链?br /> 
q? D话涉及两个关键概念Q内存块QMemBlockQ和自由内存l点QFreeNodeQ。内存块大小一般固定ؓMemBlockSize字节Q除ȝ以徏 立链表的指针外)。内存块在申请之初就被划分ؓ多个内存l点QNodeQ,每个Node大小为 ItemSizeQ小对象的大)Q计 MemBlockSize/ItemSize个。这MemBlockSize/ItemSize个内存结点刚开始全部是自由的,他们被串成链表。我们看? 甌/释放内存q程Q就很容易明白这样做的目的?br /> 
甌内存q程
代码如下Q?br />void* MemPool::malloc()    // 没有参数
{
    if (m_pFreeNodeHeader == NULL)
    {
       const int nCount = m_nMemBlockSize/m_nItemSize;
        _MemBlock* pNewBlock = new _MemBlock;
        pNewBlock->data[0].pPrev = NULL;
        for (int i = 1; i < nCount; ++i)
            pNewBlock->data[i].pPrev = &pNewBlock->data[i-1];
        m_pFreeNodeHeader = &pNewBlock->data[nCount-1];
        pNewBlock->pPrev = m_pMemBlock;
        m_pMemBlock = pNewBlock;
    }
    void* pFreeNode = m_pFreeNodeHeader;
    m_pFreeNodeHeader = m_pFreeNodeHeader->pPrev;
    return pFreeNode;
}
 
内存甌q程分ؓ两种情况Q?br />
    * 在自由内存结炚w表(FreeNodeListQ非I?br />      在此情况下,Allocq程只是从链表中摘下一个结点的q程?br />       
    * 否则Q意味着需要一个新的内存块(MemBlock)?br />      q个q程需要将新申LMemBlock切割成多个NodeQƈ把它们串h?br />      MemPool技术的开销主要在这?br />        

释放内存q程
 代码如下Q?br />void MemPool::free(void* p)
{
    _FreeNode* pNode = (_FreeNode*)p;
    pNode->pPrev = m_pFreeNodeHeader;
    m_pFreeNodeHeader = pNode;
}
 
释放q程极其单,只是把要释放的结Ҏ到自由内存链表(FreeNodeListQ的开头即可?br /> 
性能分析
MemPool技术申请内?释放内存均极其快Q比AutoFreeAlloc慢)。其内存分配q程多数情况下复杂度为O(1)Q主要开销在FreeNodeList为空需要生成新的MemBlock时。内存释放过E复杂度为O(1)?br /> 
 
boost::pool

boost::pool是内存池技术的变种。主要的变化如下Q?br />
     * MemBlock改ؓ非固定长?MemBlockSize)Q而是Q第1ơ申h m_nItemSize*32Q第2ơ申h m_nItemSize*64Q第3ơ申hm_nItemSize*128Q以此类推。不采用 固定的MemBlockSizeQ而采用这U做法预模型(是的Q这是一U用户内存需求的预测模型Q其实std::vector的内存增长亦采用了该? 型)Q是一个细节上的改良?br />       
    * 增加了ordered_free(void* p) 函数?br />
       ordered_free区别于free的是Qfree把要释放的结Ҏ到自由内存链? QFreeNodeListQ的开_ordered_free则假设FreeNodeList是有序的Q因此会遍历FreeNodeList把要释放? l点插入到合适的位置?br />
      我们已经看到Qfree的复杂度是O (1)Q非常快。但h意ordered_free是比较费的操作,其复杂度是O(N)。这里N是FreeNodeList的大。对于一个频J释?? LpȝQ这个N很可能是个大数。这个boost描述得很清楚Qhttp: //www.boost.org/libs/pool/doc/interfaces/pool.html 

注意Q不要认为boost提供ordered_free是多此一举。后文我们会在讨论boost::object_pool时解释这一炏V?br /> 
Z内存池技术的通用内存分配lg 
 
sgi-stl把内存池QMemPoolQ技术进行发扬光大,用它来实现其最Ҏ的allocator?br /> 
? 大体的思想是,建立16个MemPoolQ?lt;=8字节的内存申L0号MemPool分配Q?lt;=16字节的内存申L1号? MemPool分配Q?lt;=24字节的内存有2号MemPool分配Q以此类推。最后,>128字节的内存申L普通的malloc分配?br />注意
以上代码属于伪代码(struct _FreeNode、_MemBlock~译通不q)Qƈ且去除了出错处理?img src ="http://www.shnenglu.com/zzh/aggbug/19616.html" width = "1" height = "1" />

Xiao.Zhu 2007-03-12 10:57 发表评论
]]>
W九章.指针的安全问?/title><link>http://www.shnenglu.com/zzh/articles/19613.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:47:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19613.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19613.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19613.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19613.html</trackback:ping><description><![CDATA[ <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体">看下面的例子Q?/font> <span lang="EN-US"> <font face="宋体"> <br />例十七: <br />chars='a'; <br />int*ptr; <br />ptr=(int*)&s; <br />*ptr=1298Q?br />? 针ptr是一个int*cd的指针,它指向的cd是int。它指向的地址是s的首地址。在32位程序中Qs占一个字节,intcd占四个字节。最后一? 语句不但改变了s所占的一个字节,q把和s怏的高地址方向的三个字节也改变了。这三个字节是干什么的Q只有编译程序知道,而写E序的h是不太可能知? 的。也许这三个字节里存储了非常重要的数据,也许q三个字节里正好是程序的一条代码,而由于你Ҏ针的马虎应用Q这三个字节的D改变了!q会造成崩溃? 的错误。?br />让我们再来看一例: <br />例十八: <br />1。chara; <br />2。int*ptr=&a; <br />... <br />... <br />3。ptr++; <br />4?ptr=115; <br />? 例子完全可以通过~译Qƈ能执行。但是看到没有?W?句对指针ptrq行自加1q算后,ptr指向了和整Ş变量a盔R的高地址方向的一块存储区。这块存? 区里是什么?我们不知道。有可能它是一个非帔R要的数据Q甚臛_能是一条代码。而第4句竟然往q片存储区里写入一个数据!q是严重的错误。所以在使用指针 ӞE序员心里必非常清楚:我的指针I竟指向了哪里。在用指针访问数l的时候,也要注意不要出数组的低端和高端界限Q否则也会造成cM的错误。?br />? 指针的强制类型{换:ptr1=(TYPE*)ptr2中,如果sizeof(ptr2的类?大于sizeof(ptr1的类?Q那么在使用指针 ptr1来访问ptr2所指向的存储区时是安全的。如果sizeof(ptr2的类?于sizeof(ptr1的类?Q那么在使用指针ptr1来访 问ptr2所指向的存储区时是不安全的。至于ؓ什么,读者结合例十七来想一惻I应该会明白的?/font> </span> </font> </font> </font> </font> </font> </font> </span> <img src ="http://www.shnenglu.com/zzh/aggbug/19613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:47 <a href="http://www.shnenglu.com/zzh/articles/19613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W七章。指针和函数的关p?/title><link>http://www.shnenglu.com/zzh/articles/19611.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:46:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19611.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19611.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19611.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19611.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19611.html</trackback:ping><description><![CDATA[ <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体">可以把一个指针声明成Z个指向函数的指针?/font> <span lang="EN-US"> <font face="宋体"> <br />intfun1(char*,int); <br />int(*pfun1)(char*,int); <br />pfun1=fun1; <br />.... <br />.... <br />inta=(*pfun1)("abcdefg",7);//通过函数指针调用函数。?br />可以把指针作为函数的形参。在函数调用语句中,可以用指针表辑ּ来作为实参。?br />例十三: <br />intfun(char*); <br />inta; <br />charstr[]="abcdefghijklmn"; <br />a=fun(str); <br />... <br />... <br />intfun(char*s) <br />{ <br />intnum=0; <br />for(inti=0;i{ <br />num+=*s;s++; <br />} <br />returnnum; <br />} <br />q个例子中的函数funl计一个字W串中各个字W的ASCII码g和。前面说了,数组的名字也是一个指针?/font> </span> </font> </font> </font> </font> </font> </span> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <span style="font-size: 10.5pt; color: blue;">在函数调用中Q当?span lang="EN-US">str作ؓ实参传递给形参s后,实际是把str的g递给了sQs所指向的地址和str所指向的地址一_但是str和s各自占用各自的存储空间?/span></span> <span style="font-size: 10.5pt; color: black;">在函C内对<span lang="EN-US">sq行自加1q算Qƈ不意味着同时对strq行了自?q算?/span></span> </font> </font> </font> </font> </font> </font> <img src ="http://www.shnenglu.com/zzh/aggbug/19611.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:46 <a href="http://www.shnenglu.com/zzh/articles/19611.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W八章。指针类型{?/title><link>http://www.shnenglu.com/zzh/articles/19612.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:46:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19612.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19612.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19612.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19612.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19612.html</trackback:ping><description><![CDATA[ <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <span style="font-size: 10.5pt; color: black;">当我们初始化一个指针或l一个指针赋值时Q赋值号的左Ҏ一个指针,赋值号的右Ҏ一个指针表辑ּ。在我们前面所丄例子中,</span> <span style="font-size: 10.5pt; color: blue;">l大多数情况下,指针的类型和指针表达式的cd是一LQ指针所指向的类型和指针表达式所指向的类型是一L?/span> </font> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font face="宋体"> <br />例十四: <br />1。floatf=12.3; <br />2。float*fptr=&f; <br />3。int*p; <br />在上面的例子中,假如我们惌指针p指向实数fQ应该怎么搞?是用下面的语句吗Q?br />p=&f; <br />? 寏V因为指针p的类型是int*Q它指向的类型是int。表辑ּ&f的结果是一个指针,指针的类型是float*,它指向的cd是float。两 者不一_直接赋值的Ҏ是不行的。至在我的MSVC++6.0上,Ҏ针的赋D句要求赋值号两边的类型一_所指向的类型也一_其它的编译器上我 没试q,大家可以试试。ؓ了实现我们的目的Q需要进?强制cd转换"Q?br />p=(int*)&f; <br /></font> </span> <span style="font-size: 10.5pt; color: blue;"> <font face="宋体">如果有一个指?/font> <span lang="EN-US"> <font face="宋体">pQ我们需要把它的cd和所指向的类型改为TYEP* 和TYPEQ?br />那么语法格式是: <br />(TYPE*)pQ?/font> </span> </span> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br /></span> <span style="font-size: 10.5pt; color: blue;">q样强制cd转换的结果是一个新指针Q该新指针的cd?span lang="EN-US">TYPE*Q它指向的类型是TYPEQ它指向的地址是原指针指向的地址。而原来的指针p的一切属性都没有被修攏V?/span></span> </font> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br />一个函数如果用了指针作ؓ形参Q那么在函数调用语句的实参和形参的结合过E中Q也会发生指针类型的转换。?br />例十五: <br />voidfun(char*); <br />inta=125,b; <br />fun((char*)&a); <br />... <br />... <br />voidfun(char*s) <br />{ <br />charc; <br />c=*(s+3);*(s+3)=*(s+0);*(s+0)=c; <br />c=*(s+2);*(s+2)=*(s+1);*(s+1)=c; <br />} <br />} <br />? 意这是一?2位程序,故intcd占了四个字节Qcharcd占一个字节。函数fun的作用是把一个整数的四个字节的顺序来个颠倒。注意到了吗Q在函数 调用语句中,实参&a的结果是一个指针,它的cd是int*Q它指向的类型是int。Ş参这个指针的cd是char*Q它指向的类型是char? q样Q在实参和Ş参的l合q程中,我们必须q行一ơ从int*cd到char*cd的{换。结合这个例子,我们可以q样来想象编译器q行转换的过E:~译 器先构造一个时指针char*tempQ 然后执行temp=(char*)&aQ最后再把temp的g递给s。所以最后的l果是:s的类? 是char*,它指向的cd是charQ它指向的地址是a的首地址。?br />我们已经知道Q?/span> <span style="font-size: 10.5pt; color: blue;">指针的值就是指针指向的地址Q在<span lang="EN-US">32位程序中Q指针的值其实是一?2位整数?/span></span> </font> <span style="font-size: 10.5pt; color: black;"> <font face="宋体">那可不可以把一个整数当作指针的值直接赋l指针呢Q就象下面的语句Q?/font> <span lang="EN-US"> <font face="宋体"> <br />unsignedinta; <br />TYPE*ptr;//TYPE是intQchar或结构类型等{类型。?br />... <br />... <br />a=20345686; <br />ptr=20345686;//我们的目的是要指针ptr指向地址20345686Q十q制 <br />Q?br />ptr=a;//我们的目的是要指针ptr指向地址20345686Q十q制Q?br />~译一下吧。结果发现后面两条语句全是错的。那么我们的目的׃能达C吗?不,q有办法Q?br />unsignedinta; <br />TYPE*ptr;//TYPE是intQchar或结构类型等{类型。?br />... <br />... <br />a=某个敎ͼq个数必M表一个合法的地址Q?br />ptr=(TYPE*)aQ?/呵呵Q这可以了。?br />严格说来q里?TYPE*)和指针类型{换中?TYPE*)q不一栗这里的(TYP <br />E*)的意思是把无W号整数a的值当作一个地址来看待。上面强调了a的值必M表一个合法的地址Q否则的话,在你使用ptr的时候,׃出现非法操作错误。?br />x能不能反q来Q把指针指向的地址x针的值当作一个整数取出来。完全可以。下面的例子演示了把一个指针的值当作一个整数取出来Q然后再把这个整数当作一个地址赋给一个指针: <br />例十六: <br />inta=123,b; <br />int*ptr=&a; <br />char*str; <br />b=(int)ptr;//把指针ptr的值当作一个整数取出来。?br />str=(char*)b;//把这个整数的值当作一个地址赋给指针str。?br />好了Q现在我们已l知道了Q可以把指针的值当作一个整数取出来Q也可以把一个整数值当作地址赋给一个指针?/font> </span> </span> </font> </font> </font> </font> </font> <img src ="http://www.shnenglu.com/zzh/aggbug/19612.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:46 <a href="http://www.shnenglu.com/zzh/articles/19612.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W六章。指针和l构cd的关p?/title><link>http://www.shnenglu.com/zzh/articles/19610.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:45:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19610.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19610.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19610.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19610.html</trackback:ping><description><![CDATA[ <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体">可以声明一个指向结构类型对象的指针?/font> <span lang="EN-US"> <font face="宋体"> <br />例十一Q?br />struct MyStruct <br />{ <br />inta; <br />intb; <br />intc; <br />} <br />MyStruct ss={20,30,40};//声明了结构对象ssQƈ把ss的三个成员初始?br />化ؓ20Q?0?0。?br />MyStruct *ptr=&ss;//声明了一个指向结构对象ss的指针。它的类型是 <br />MyStruct*,它指向的cd是MyStruct。?br /></font> </span> </font> </font> </font> </font> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体">int*pstr=(int*)&ss;//声明了一个指向结构对象ss的指针。但是它的?br />cd和它指向的类型和ptr是不同的?/font> </font> </font> </font> </font> </span> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br />请问怎样通过指针ptr来访问ss的三个成员变量? <br />{案Q?br />ptr->a; <br />ptr->b; <br />ptr->c; <br />又请问怎样通过指针pstr来访问ss的三个成员变量? <br />{案Q?br />*pstrQ?/讉K了ss的成员a。?br />*(pstr+1);//讉K了ss的成员b。?br />*(pstr+2)//讉K了ss的成员c。?br />呵呵Q虽然我在我的MSVC++6.0上调式过上述代码Q但是要知道Q这样用pstr来访问结构成员是不正规的Qؓ了说明ؓ什么不正规Q让我们看看怎样通过指针来访问数l的各个单元Q?br />例十二: <br />int array[3]={35,56,37}; <br />int*pa=array; <br />通过指针pa讉K数组array的三个单元的Ҏ是: <br />*pa;//讉K了第0号单元?br />*(pa+1);//讉K了第1号单元?br />*(pa+2);//讉K了第2号单元?br />从格式上看倒是与通过指针讉Kl构成员的不正规Ҏ的格式一栗?br /></span> <span style="font-size: 10.5pt; color: blue;">所有的<span lang="EN-US">C/C++~译?/span></span> <span style="font-size: 10.5pt; color: rgb(51, 51, 153);">在排列数l的单元ӞL把各个数l单元存攑֜q箋的存储区里,单元和单元之间没有空隙?/span> <span style="font-size: 10.5pt; color: blue;">但在存放l构对象的各个成员时Q在某种~译环境下,可能会需要字寚w或双字对齐或者是别的什么对齐,需要在盔R两个成员之间加若q个<span lang="EN-US">"填充字节"Q这导致各个成员之间可能会有若q个字节的空隙?/span></span> </font> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font face="宋体"> <br />所 以,在例十二中,即*pstr讉KCl构对象ss的第一个成员变量aQ也不能保证*(pstr+1)׃定能讉K到结构成员b。因为成员a和成员b? 间可能会有若q填充字节,说不?(pstr+1)正好访问到了这些填充字节呢。这也证明了指针的灵zL。要是你的目的就是想看看各个l构成员之间到底 有没有填充字节,嘿,q倒是个不错的Ҏ。?br />通过指针讉Kl构成员的正方法应该是象例十二中用指针ptr的方法?/font> </span> </font> </font> </font> </font> <img src ="http://www.shnenglu.com/zzh/aggbug/19610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:45 <a href="http://www.shnenglu.com/zzh/articles/19610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W五章。数l和指针的关p?/title><link>http://www.shnenglu.com/zzh/articles/19609.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:44:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19609.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19609.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19609.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19609.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19609.html</trackback:ping><description><![CDATA[ <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <span style="font-size: 10.5pt; color: red;" ;="" mso-hansi-font-family:="" times="" new="" roman=""> </span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> </span> </font> </font> </font> </font> <p style="margin: 0cm 0cm 0pt; line-height: 150%; text-align: justify;"> <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体">如果对声明数l的语句不太明白的话Q请参阅我前D|间脓出的文章</font> <span lang="EN-US"> <font face="宋体"><<如何理解c和c++的复杂类型声?gt;>。?br />数组的数l名其实可以看作一个指针。看下例Q?br />例八Q?br /></font> </span> </font> </font> </font> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体">int array[10]={0,1,2,3,4,5,6,7,8,9}</font> </font> </font> </font> </span> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US">,value; <br />... <br />... <br />value=array[0];//也可写成Qvalue=*array; <br />value=array[3];//也可写成Qvalue=*(array+3); <br />value=array[4];//也可写成Qvalue=*(array+4); <br />上例中,一般而言数组名array代表数组本nQ类型是int[10]Q但</span> <span style="font-size: 10.5pt; color: blue;">如果?span lang="EN-US">array看做指针的话Q它指向数组的第0个单元,cd是int*Q所指向的类型是数组单元的类型即int?/span></span> </font> <span style="font-size: 10.5pt; color: black;"> <font face="宋体">因此</font> <span lang="EN-US"> <font face="宋体">*array{于0׃点也不奇怪了。同理,array+3是一个指向数l第3个单元的指针Q所?(array+3){于3。其它依此类推。?br />例九Q?br />例九Q?br /></font> </span> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US"> <font face="宋体">char*str[3]={ <br />"Hello,thisisasample!", <br />"Hi,goodmorning.", <br />"Helloworld" <br />}; <br /></font> </span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font face="宋体">chars[80]Q?br />strcpy(s,str[0]);//也可写成strcpy(s,*str); <br />strcpy(s,str[1]);//也可写成strcpy(s,*(str+1)); <br />strcpy(s,str[2]);//也可写成strcpy(s,*(str+2)); <br />上例中,</font> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US"> <font face="宋体">str是一个三单元的数l,该数l的每个单元都是一个指针,q些指?br />针各指向一个字W串。把指针数组名str当作一个指针的话,它指向数l的W?号单元,它的cd是char**Q它指向的类型是char*?/font> </span> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br /></span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US">*str也是一个指针,它的cd是char*Q它所指向的类型是charQ它指向的地址是字W串"Hello,thisisasample!"的第一个字W的地址Q即'H'的地址?/span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US">str+1也是一个指针,它指向数l的W?号单元,它的cd是char**Q它指向的类型是char*。?/span> </font> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br /> </span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US"> <font face="宋体">*(str+1)也是一个指针,它的cd是char*Q它所指向的类型是charQ它指向 "Hi,goodmorning."的第一个字W?H'Q等{。?/font> </span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br /> <font face="宋体">下面ȝ一下数l的数组名的问题?/font> </span> <span style="font-size: 10.5pt; color: blue;"> <font face="宋体">声明了一个数l?span lang="EN-US">TYPE array[n]Q则数组名称array有了两重含义:W一Q它代表整个数组Q它的类型是TYPE[n]Q第二 ,它是一个指针,该指针的cd? TYPE*Q该指针指向的类型是TYPEQ也是数组单元的类型,该指针指向的内存区就是数l第0号单元,该指针自己占有单独的内存区,注意它和数组W? 号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表辑ּ是错误的?/span></font> </span> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br />在不同的表达式中数组名array可以扮演不同的角艌Ӏ?br /></span> <span style="font-size: 10.5pt; color: blue;">在表辑ּ<span lang="EN-US">sizeof(array)中,数组名array代表数组本nQ故q时sizeof函数出的是整个数组的大?/span></span> </font> <font face="宋体"> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <br /></span> <span style="font-size: 10.5pt; color: blue;">在表辑ּ<span lang="EN-US">*array中,array扮演的是指针Q因此这个表辑ּ的结果就是数l第0号单元的倹{sizeof(*array)出的是数组单元的大?/span></span> </font> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font face="宋体"> <br /></font> </span> <span style="font-size: 10.5pt; color: blue;"> <font face="宋体">表达?/font> <span lang="EN-US"> <font face="宋体">array+nQ其中n=0Q?Q?Q?...。)中,array扮演的是指针Q故array+n的结果是一个指针,它的cd是TYPE*Q它指向的类型是TYPEQ它指向数组Wn号单元。故sizeof(array+n)出的是指针cd的大。?br /></font> </span> </span> <span style="font-size: 10.5pt; color: black;"> <font face="宋体">例十Q?/font> <span lang="EN-US"> <font face="宋体"> <br />int array[10]; <br />int(*ptr)[10]; <br />ptr=&array; <br />上例中ptr是一个指针,它的cd是int(*)[10]Q他指向的类型是int[10] Q我们用整个数组的首地址来初始化它。在语句ptr=&array中,array代表数组本n。?br />本节中提C函数sizeof()Q那么我来问一问,</font> </span> </span> <font face="宋体"> <span style="font-size: 10.5pt; color: blue;" lang="EN-US">sizeof(指针名称)出?/span> <span style="font-size: 10.5pt; color: black;">I竟</span> <span style="font-size: 10.5pt; color: blue;">是指针自w类型的大小</span> <span style="font-size: 10.5pt; color: black;">呢还是指针所指向的类型的大小Q答案是前者?/span> </font> <span style="font-size: 10.5pt; color: blue;"> <font face="宋体">例如Q?/font> <span lang="EN-US"> <font face="宋体"> <br />int(*ptr)[10]; <br />则在32位程序中Q有Q?br />sizeof(int(*)[10])==4 <br />sizeof(int[10])==40 <br />sizeof(ptr)==4 <br /></font> </span> </span> <font face="宋体"> <span style="font-size: 10.5pt; color: black;">实际上,</span> <span style="font-size: 10.5pt; color: blue;" lang="EN-US">sizeof(对象)出的都是对象自w的cd的大?/span> </font> <span style="font-size: 10.5pt; color: black;"> <font face="宋体">Q而不是别的什?/font> <span lang="EN-US"> <font face="宋体"> <br />cd的大?/font> </span> </span> </font> </font> </font> </p> <img src ="http://www.shnenglu.com/zzh/aggbug/19609.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:44 <a href="http://www.shnenglu.com/zzh/articles/19609.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W四章。指针表辑ּ?/title><link>http://www.shnenglu.com/zzh/articles/19608.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:43:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19608.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19608.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19608.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19608.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19608.html</trackback:ping><description><![CDATA[ <p style="margin: 0cm 0cm 0pt; line-height: 150%; text-align: justify;"> <span style="font-size: 10.5pt; color: blue;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体">一个表辑ּ的最后结果如果是一个指针,那么q个表达式就叫指针表式?/font> </font> </font> </font> </span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体"> <br />下面是一些指针表辑ּ的例子: <br />例六Q?br />inta,b; <br />intarray[10]; <br />int*pa; <br />pa=&a;//&a是一个指针表辑ּ。?br />int**ptr=&pa;//&pa也是一个指针表辑ּ。?br />*ptr=&b;//*ptr?amp;b都是指针表达式。?br />pa=array; <br />pa++;//q也是指针表辑ּ。?br />例七Q?br />char*arr[20]; <br />char**parr=arr;//如果把arr看作指针的话Qarr也是指针表达式?br />char*str; <br />str=*parr;//*parr是指针表辑ּ <br />str=*(parr+1);//*(parr+1)是指针表辑ּ <br />str=*(parr+2);//*(parr+2)是指针表辑ּ </font> </font> </font> </font> </span> </p> <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体">׃指针表达式的l果是一个指针,所以指针表辑ּ也具有指针所h的四个要素:指针的类型,指针所指向的类型,指针指向的内存区Q指针自w占据的内存?/font> <span lang="EN-US"> <font face="宋体"> <br />好了Q?/font> </span> </font> </font> </font> </span> <span style="font-size: 10.5pt; color: blue;"> <font size="3"> <font face="宋体"> <font face="宋体"> <font face="宋体">当一个指针表辑ּ的结果指针已l明地h了指针自w占据的内存的话Q这个指针表辑ּ是一个左|否则׃是一个左倹{?span lang="EN-US"> </span></font> </font> </font> </font> </span> <span style="font-size: 10.5pt; color: black;" lang="EN-US"> <font size="3"> <font face="宋体"> <font face="宋体"> <br /> <font face="宋体">在例七中Q?amp;a不是一个左|因ؓ它还没有占据明确的内存?ptr是一个左|因ؓ*ptrq个指针已经占据了内存,其实*ptr是指针paQ既然pa已经在内存中有了自己的位|,那么*ptr当然也有了自q位置?/font> </font> </font> </font> </span> <img src ="http://www.shnenglu.com/zzh/aggbug/19608.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:43 <a href="http://www.shnenglu.com/zzh/articles/19608.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W三章.q算W?amp;?http://www.shnenglu.com/zzh/articles/19607.htmlXiao.ZhuXiao.ZhuMon, 12 Mar 2007 02:42:00 GMThttp://www.shnenglu.com/zzh/articles/19607.htmlhttp://www.shnenglu.com/zzh/comments/19607.htmlhttp://www.shnenglu.com/zzh/articles/19607.html#Feedback0http://www.shnenglu.com/zzh/comments/commentRss/19607.htmlhttp://www.shnenglu.com/zzh/services/trackbacks/19607.html q里 &是取地址q算W,*?..书上叫做"间接q算W?。?br /> &a的运结果是一个指针,指针的类型是a的类型加?Q指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。?/font>
*p的运结果就五花八门了?/font>
M*p的结果是p所指向的东?/span> Q这个东西有q些特点Q?/span> 它的cd?span lang="EN-US">p指向的类型,它所占用的地址是p所指向的地址?/span>  
例五Q?br />
inta=12;
 
intb; 
int*p; 
int**ptr; 
p=&a;//
&a的结果是一个指针,cd是int*Q指向的cd是intQ指向的地址是a的地址?/span>
 
*p=24;//*p的结果,在这里它的类型是intQ它所占用的地址是p所指向的地址Q显Ӟ*p是变量a。?br />ptr=&p;//&p的结果是个指针,该指针的cd是p的类型加?Q在q里是int **。该指针所指向的类型是p的类型,q里是int*。该指针所指向的地址是指针p自己的地址。?br />*ptr=&b;//*ptr是个指针Q?amp;b的结果也是个指针Q且q两个指针的cd和所指向的类型是一LQ所以用&b来给*ptr赋值就是毫无问题的了。?br />**ptr=34;//*ptr的结果是ptr所指向的东西,在这里是一个指针,对这个指针再做一?q算Q结果就是一个intcd的变?/font>


Xiao.Zhu 2007-03-12 10:42 发表评论
]]>
W二章.指针的算术运?/title><link>http://www.shnenglu.com/zzh/articles/19603.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 02:11:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19603.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19603.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19603.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19603.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19603.html</trackback:ping><description><![CDATA[ <p style="margin: 0cm 0cm 0pt; line-height: 150%; text-align: justify;"> <span style="font-size: 10.5pt; color: black;"> <font size="3"> <font face="宋体">指针可以加上或减M个整数。指针的q种q算的意义和通常的数值的加减q算的意义是不一L。例如:</font> <span lang="EN-US"> <font face="宋体"> <br />例二Q?br />1。chara[20]; <br />2。int*ptr=a; <br />... <br />... <br />3。ptr++; <br />? 上例中,指针ptr的类型是int*,它指向的cd是intQ它被初始化为指向整形变量a。接下来的第3句中Q指针ptr被加?Q编译器是这样处理的Q? 它把指针ptr的值加上了sizeof(int)Q在32位程序中Q是被加上了4。由于地址是用字节做单位的Q故ptr所指向的地址由原来的变量a的地址 向高地址方向增加?个字节。?br />׃charcd的长度是一个字节,所以,原来ptr是指向数la的第0号单元开始的四个字节Q此时指向了数组a中从W?号单元开始的四个字节。?br />我们可以用一个指针和一个@环来遍历一个数l,看例子:<br />例三Q?br />intarray[20]; <br />int*ptr=array; <br />... <br />//此处略去为整型数l赋值的代码。?br />... <br />for(i=0;i<20;i++) <br />{ <br />(*ptr)++; <br />ptr++Q?br />} <br />q个例子整型数l中各个单元的值加1。由于每ơ@环都指针ptr?Q所以每ơ@环都能访问数l的下一个单元。?br />再看例子Q?br />例四Q?br />1。chara[20]; <br />2。int*ptr=a; <br />... <br />... <br />3。ptr+=5; <br />? q个例子中,ptr被加上了5Q编译器是这样处理的Q将指针ptr的值加?乘sizeof(int)Q在32位程序中是加上??=20。由于地址 的单位是字节Q故现在的ptr所指向的地址比v?后的ptr所指向的地址来说Q向高地址方向Ud?0个字节。在q个例子中,没加5前的ptr指向数组 a的第0号单元开始的四个字节Q加5后,ptr已经指向了数la的合法范围之外了。虽然这U情况在应用上会出问题,但在语法上却是可以的。这也体现出了指 针的灉|性。?br />如果上例中,ptr是被减去5Q那么处理过E大同小异,只不qptr的值是被减?乘sizeof(int)Q新的ptr指向的地址比原来的ptr所指向的地址向低地址方向Ud?0个字节。 ?br />ȝ一下,一个指针ptrold加上一个整数n后,l果是一个新的指针ptrnewQ?br />ptrnew 的类型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值增加了n? sizeof(ptrold所指向的类?个字节。就是说Qptrnew所指向的内存区比ptrold所指向的内存区向高地址方向Ud了n? sizeof(ptrold所指向的类?个字节。?br />一个指针ptrold减去一个整数n后,l果是一个新的指针ptrnewQptrnew的类 型和ptrold的类型相同,ptrnew所指向的类型和ptrold所指向的类型也相同。ptrnew的值将比ptrold的值减了n乘sizeof (ptrold所指向的类?个字节,是_ptrnew所指向的内存区比ptrold所指向的内存区向低地址方向Ud了n乘sizeof (ptrold所指向的类?个字节。?/font> </span> </font> </span> </p> <span style="font-size: 10.5pt; color: red;" times="" new="" roman="" ;="" mso-fareast-font-family:="" 宋体;="" mso-font-kerning:="" 1.0pt;="" mso-ansi-language:="" en-us;="" mso-fareast-language:="" zh-cn;="" mso-bidi-language:="" ar-sa="" lang="EN-US"> <font size="3"> <font face="宋体"> <br style="page-break-before: always;" clear="all" /> </font> </font> </span> <img src ="http://www.shnenglu.com/zzh/aggbug/19603.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 10:11 <a href="http://www.shnenglu.com/zzh/articles/19603.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>W一章.指针的概?/title><link>http://www.shnenglu.com/zzh/articles/19601.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 01:52:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19601.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19601.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19601.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19601.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19601.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="margin: 0cm 0cm 0pt; line-height: 150%;"> <span style="color: red; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman=""> <font size="3">W一章.指针的概?/font> </span> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针是一个特D的变量Q它里面存储的数D解释成ؓ内存里的一个地址?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> </font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">要搞清一个指针需要搞清指针的四方面的内容Q指针的cdQ指针所指向?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> </font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">cdQ指针的值或者叫指针所指向的内存区Q还有指针本w所占据的内存区。让</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> </font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">我们分别说明?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">先声明几个指针放着做例子:</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">例一Q?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br />(1)int*ptr; <br />(2)char*ptr; <br />(3)int**ptr; <br />(4)int(*ptr)[3]; <br />(5)int*(*ptr)[4]; <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">如果看不懂后几个例子的话Q请参阅我前D|间脓出的文章</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"><<</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">如何理解</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">c</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">c ++</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">的复杂类型声?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">>></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">?/span> </font> <font size="3"> <font face="Times New Roman"> <span style="color: black;" lang="EN-US"> <br /></span> <span style="color: fuchsia;" lang="EN-US">1</span> </font> <span style="color: fuchsia; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">。指针的cd?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">从语法的角度看,?/span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的cd?/span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">q是指针本n所h的类型。让我们看看例一中各个指针的cdQ?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br />(1)int*ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int* <br />(2)char*ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">char* <br />(3)int**ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int** <br />(4)int(*ptr)[3];//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int(*)[3] <br />(5)int*(*ptr)[4];//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int*(*)[4] <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">怎么P扑և指针的类型的Ҏ是不是很单?</span> </font> <font size="3"> <font face="Times New Roman"> <span style="color: black;" lang="EN-US"> <br /></span> <span style="color: fuchsia;" lang="EN-US">2</span> </font> <span style="color: fuchsia; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">。指针所指向的类型?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">当你通过指针来访问指针所指向的内存区Ӟ指针所指向的类型决定了~译器将把那片内存区里的内容当做什么来看待?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">从语法上看,你只?/span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">把指针声明语句中的指针名字和名字左边的指针声明符</span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">*</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">LQ剩下的是指针所指向的类型?/span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">例如Q?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br />(1)int*ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的类型是</span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int <br />(2)char*ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的的cd?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">char <br />(3)int**ptr;//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的的cd?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int* <br />(4)int(*ptr)[3];//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的的cd?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int()[3] <br />(5)int*(*ptr)[4];//</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的的cd?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">int*()[4] <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">在指针的术q算中,指针所指向的类型有很大的作用?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">(</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">x针本w的cd</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">)</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">和指针所指向的类型是两个概念。当你对</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">C</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">来熟悉时Q你会发玎ͼ把与指针搅和在一L</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">cd</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">q个概念分成</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的类?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">"</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">两个概念Q是_N指针的关键点之一。我看了不少书,发现有些写得差的书中Q就把指针的q两个概忉|在一起了Q所以看起书来前后矛盾,看糊涂?/span> </font> <font size="3"> <font face="Times New Roman"> <span style="color: black;" lang="EN-US"> <br /></span> <span style="color: fuchsia;" lang="EN-US">3</span> </font> <span style="color: fuchsia; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">。指针的|或者叫指针所指向的内存区或地址?/span> <span style="color: fuchsia;" lang="EN-US"> <font face="Times New Roman"> </font> </span> </font> <span style="color: black;" lang="EN-US"> <br /> </span> <font size="3"> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的值是指针本n存储的数|q个值将被编译器当作一个地址Q而不是一个一般的数倹{在</span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">32</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">位程序里Q所有类型的指针的值都是一?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">32</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">位整敎ͼ因ؓ</span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">32</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">位程序里内存地址全都?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">32</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">位长?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman"> </font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的内存区是从指针的值所代表的那个内存地址开始,长度?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">si zeof(</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的类?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">)</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">的一片内存区?/span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">以后Q我们说一个指针的值是</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">XX</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">Q就相当于说该指针指向了?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">XX</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">为首地址的一片内存区域;</span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">我们说一个指针指向了某块内存区域Q就相当于说该指针的值是q块内存区域的首地址?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的内存区和指针所指向的类型是两个完全不同的概c在例一中,</span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针所指向的类型已l有了,但由于指针还未初始化Q所以它所指向的内存区是不存在的,或者说是无意义的?/span> </font> <font size="3"> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">以后Q每遇到一个指针,都应该问问:q个指针的类型是什么?指针指的cd是什么?该指针指向了哪里Q?/span> </font> <font size="3"> <font face="Times New Roman"> <span style="color: black;" lang="EN-US"> <br /></span> <span style="color: fuchsia;" lang="EN-US">4</span> </font> <span style="color: fuchsia; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">。指针本w所占据的内存区?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针本n占了多大的内存?你只要用函数</span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">sizeof(</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针的类?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">)</font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">一下就知道了?/span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">?/span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">32</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">位^台里Q指针本w占据了</span> <span style="color: blue;" lang="EN-US"> <font face="Times New Roman">4</font> </span> <span style="color: blue; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">个字节的长度?/span> </font> <font size="3"> <span style="color: black;" lang="EN-US"> <font face="Times New Roman"> <br /></font> </span> <span style="color: black; font-family: 宋体;" ;="" mso-hansi-font-family:="" times="" new="" roman="">指针本n占据的内存这个概念在判断一个指针表辑ּ是否是左值时很有用?/span> <span style="color: black;" lang="EN-US"> <font face="Times New Roman">  </font> </span> </font> </p> <span style="font-size: 10.5pt; color: red;" times="" new="" roman="" ;="" mso-fareast-font-family:="" 宋体;="" mso-font-kerning:="" 1.0pt;="" mso-ansi-language:="" en-us;="" mso-fareast-language:="" zh-cn;="" mso-bidi-language:="" ar-sa="" lang="EN-US"> <font size="3"> <br style="page-break-before: always;" clear="all" /> </font> </span> <img src ="http://www.shnenglu.com/zzh/aggbug/19601.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 09:52 <a href="http://www.shnenglu.com/zzh/articles/19601.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C语言字符串函数汇?/title><link>http://www.shnenglu.com/zzh/articles/19600.html</link><dc:creator>Xiao.Zhu</dc:creator><author>Xiao.Zhu</author><pubDate>Mon, 12 Mar 2007 01:29:00 GMT</pubDate><guid>http://www.shnenglu.com/zzh/articles/19600.html</guid><wfw:comment>http://www.shnenglu.com/zzh/comments/19600.html</wfw:comment><comments>http://www.shnenglu.com/zzh/articles/19600.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/zzh/comments/commentRss/19600.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/zzh/services/trackbacks/19600.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="margin: 0cm 0cm 0pt;"> <span style="font-size: 9pt;" lang="EN-US"> <font face="Times New Roman">1 /*<br />2  *  linux/lib/string.c<br />3  *<br />4  *  Copyright (C) 1991, 1992  Linus Torvalds<br />5  */<br />6 <br />7 /*<br />8  * stupid library routines.. The optimized versions should generally be found<br />9  * as inline code in <asm-xx/string.h><br />10  *<br />11  * These are buggy as well..<br />12  */<br />13  <br />14 #include <linux/types.h><br />15 <br />16 char * ___strtok = NULL;<br />17 <br /></font> <font face="Times New Roman"> <span style="color: blue;">18 char * strcpy(char * dest,const char *src)<br />19 {<br />20         char *tmp = dest;<br />21 <br />22         while ((*dest++ = *src++) != '\0')<br />23                 /* nothing */;<br />24         return tmp;<br />25 }</span> <br />26 <br />27 char * strncpy(char * dest,const char *src,size_t count)<br />28 {<br />29         char *tmp = dest;<br />30 <br />31         while (count-- && (*dest++ = *src++) != '\0')<br />32                 /* nothing */;<br />33 <br />34         return tmp;<br />35 }<br />36 <br /></font> <font face="Times New Roman"> <span style="color: blue;">37 char * strcat(char * dest, const char * src)<br />38 {<br />39         char *tmp = dest;<br />40 <br />41         while (*dest)<br />42                 dest++;<br />43         while ((*dest++ = *src++) != '\0')<br />44                 ;<br />45 <br />46         return tmp;<br />47 }</span> <br />48 <br />49 char * strncat(char *dest, const char *src, size_t count)<br />50 {<br />51         char *tmp = dest;<br />52 <br />53         if (count) {<br />54                 while (*dest)<br />55                         dest++;<br />56                 while ((*dest++ = *src++)) {<br />57                         if (--count == 0)<br />58                                 break;<br />59                 }<br />60         }<br />61 <br />62         return tmp;<br />63 }<br />64 <br /></font> <font face="Times New Roman"> <span style="color: blue;">65 int strcmp(const char * cs,const char * ct)<br />66 {<br />67         register signed char __res;<br />68 <br />69         while (1) {<br />70                 if ((__res = *cs - *ct++) != 0 || !*cs++)<br />71                         break;<br />72         }<br />73 <br />74         return __res;<br />75 }<br /></span>76 <br />77 int strncmp(const char * cs,const char * ct,size_t count)<br />78 {<br />79         register signed char __res = 0;<br />80 <br />81         while (count) {<br />82                 if ((__res = *cs - *ct++) != 0 || !*cs++)<br />83                         break;<br />84                 count--;<br />85         }<br />86 <br />87         return __res;<br />88 }<br />89 <br /></font> <font face="Times New Roman"> <span style="color: blue;">90 char * strchr(const char * s,char c)<br />91 {<br />92         for(; *s != c; ++s)<br />93                 if (*s == '\0')<br />94                         return NULL;<br />95         return (char *) s;<br />96 }<br /></span>97 <br />98 size_t strlen(const char * s)<br />99 {<br />100         const char *sc;<br />101 <br />102         for (sc = s; *sc != '\0'; ++sc)<br />103                 /* nothing */;<br />104         return sc - s;<br />105 }<br />106 <br /></font> <font face="Times New Roman"> <span style="color: blue;">107 size_t strnlen(const char * s, size_t count)<br />108 {<br />109         const char *sc;<br />110 <br />111         for (sc = s; *sc != '\0' && count--; ++sc)<br />112                 /* nothing */;<br />113         return sc - s;<br />114 }<br /></span>115 <br />116 size_t strspn(const char *s, const char *accept)<br />117 {<br />118         const char *p;<br />119         const char *a;<br />120         size_t count = 0;<br />121 <br />122         for (p = s; *p != '\0'; ++p) {<br />123                 for (a = accept; *a != '\0'; ++a) {<br />124                         if (*p == *a)<br />125                                 break;<br />126                 }<br />127                 if (*a == '\0')<br />128                         return count;<br />129                 ++count;<br />130         }<br />131 <br />132         return count;<br />133 }<br />134 <br /></font> <font face="Times New Roman"> <span style="color: blue;">135 char * strpbrk(const char * cs,const char * ct)<br />136 {<br />137         const char *sc1,*sc2;<br />138 <br />139         for( sc1 = cs; *sc1 != '\0'; ++sc1) {<br />140                 for( sc2 = ct; *sc2 != '\0'; ++sc2) {<br />141                         if (*sc1 == *sc2)<br />142                                 return (char *) sc1;<br />143                 }<br />144         }<br />145         return NULL;<br />146 }<br /></span>147 <br />148 char * strtok(char * s,const char * ct)<br />149 {<br />150         char *sbegin, *send;<br />151 <br />152         sbegin  = s ? s : ___strtok;<br />153         if (!sbegin) {<br />154                 return NULL;<br />155         }<br />156         sbegin += strspn(sbegin,ct);<br />157         if (*sbegin == '\0') {<br />158                 ___strtok = NULL;<br />159                 return( NULL );<br />160         }<br />161         send = strpbrk( sbegin, ct);<br />162         if (send && *send != '\0')<br />163                 *send++ = '\0';<br />164         ___strtok = send;<br />165         return (sbegin);<br />166 }<br />167 <br /></font> <font face="Times New Roman"> <span style="color: blue;">168 void * memset(void * s,char c,size_t count)<br />169 {<br />170         char *xs = (char *) s;<br />171 <br />172         while (count--)<br />173                 *xs++ = c;<br />174 <br />175         return s;<br />176 }<br /></span>177 <br />178 char * bcopy(const char * src, char * dest, int count)<br />179 {<br />180         char *tmp = dest;<br />181 <br />182         while (count--)<br />183                 *tmp++ = *src++;<br />184 <br />185         return dest;<br />186 }<br />187 <br /></font> <font face="Times New Roman"> <span style="color: blue;">188 void * memcpy(void * dest,const void *src,size_t count)<br />189 {<br />190         char *tmp = (char *) dest, *s = (char *) src;<br />191 <br />192         while (count--)<br />193                 *tmp++ = *s++;<br />194 <br />195         return dest;<br />196 }<br /></span>197 <br />198 void * memmove(void * dest,const void *src,size_t count)<br />199 {<br />200         char *tmp, *s;<br />201 <br />202         if (dest <= src) {<br />203                 tmp = (char *) dest;<br />204                 s = (char *) src;<br />205                 while (count--)<br />206                         *tmp++ = *s++;<br />207                 }<br />208         else {<br />209                 tmp = (char *) dest + count;<br />210                 s = (char *) src + count;<br />211                 while (count--)<br />212                         *--tmp = *--s;<br />213                 }<br />214 <br />215         return dest;<br />216 }<br />217 <br /></font> <font face="Times New Roman"> <span style="color: blue;">218 int memcmp(const void * cs,const void * ct,size_t count)<br />219 {<br />220         const unsigned char *su1, *su2;<br />221         signed char res = 0;<br />222 <br />223         for( su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)<br />224                 if ((res = *su1 - *su2) != 0)<br />225                         break;<br />226         return res;<br />227 }<br /></span>228 <br />229 /*<br />230  * find the first occurrence of byte 'c', or 1 past the area if none<br />231  */<br />232 void * memscan(void * addr, unsigned char c, size_t size)<br />233 {<br />234         unsigned char * p = (unsigned char *) addr;<br />235 <br />236         while (size) {<br />237                 if (*p == c)<br />238                         return (void *) p;<br />239                 p++;<br />240                 size--;<br />241         }<br />242         return (void *) p;<br />243 }</font> </span> </p> <img src ="http://www.shnenglu.com/zzh/aggbug/19600.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/zzh/" target="_blank">Xiao.Zhu</a> 2007-03-12 09:29 <a href="http://www.shnenglu.com/zzh/articles/19600.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.ejectorpin.cn" target="_blank">þԾƷ</a>| <a href="http://www.ahlmnet.cn" target="_blank">þ㽶ۺɫһۺɫ88</a>| <a href="http://www.srdwl.cn" target="_blank">ҹþAAAAAëƬѿ</a>| <a href="http://www.o-led.com.cn" target="_blank">˾þĻ</a>| <a href="http://www.nutiao.cn" target="_blank">þþþһƷ޹ۺAV</a>| <a href="http://www.517banjia.cn" target="_blank">þþƷһ</a>| <a href="http://www.igzan.cn" target="_blank">ݺݾþ</a>| <a href="http://www.52yydy.cn" target="_blank">Ʒ99þþþ</a>| <a href="http://www.hxsnw.com.cn" target="_blank">þþƷһۺ</a>| <a href="http://www.56zhuanjia.com.cn" target="_blank">þۺϾɫۺ97_þþ</a>| <a href="http://www.donghuitong.cn" target="_blank">þһ99</a>| <a href="http://www.cz27b1.cn" target="_blank">þþƷһ</a>| <a href="http://www.flznzb.cn" target="_blank">һþ㽶</a>| <a href="http://www.nuopie.cn" target="_blank">þþþþþۺձ</a>| <a href="http://www.sxgyhqm.cn" target="_blank">þAV</a>| <a href="http://www.sf789.com.cn" target="_blank">Ʒþˬۺ</a>| <a href="http://www.sd43.cn" target="_blank">ɫþþ99Ʒ</a>| <a href="http://www.yweishang.cn" target="_blank">þøԴƷ999</a>| <a href="http://www.gbdv.cn" target="_blank">99þþƷѿһ </a>| <a href="http://www.sina458.cn" target="_blank">޾Ʒþþþȥq</a>| <a href="http://www.qdtiandiyuan.cn" target="_blank">þó˹Ʒ</a>| <a href="http://www.shxxwxx.cn" target="_blank">þҹɫƷŷ</a>| <a href="http://www.qhcl233.cn" target="_blank">þþþһëþþ</a>| <a href="http://www.sonsan.cn" target="_blank">ݲݾþþר</a>| <a href="http://www.superpic.cn" target="_blank">99þþƷһ</a>| <a href="http://www.zmlxs.cn" target="_blank">ƷþþĻ</a>| <a href="http://www.ccssoo.com.cn" target="_blank">þþþþžžƷӰԺ</a>| <a href="http://www.blog91.cn" target="_blank">Ʒvaþþþþþ</a>| <a href="http://www.wcxkmm.cn" target="_blank">ۺϾþúݺɫ99h</a>| <a href="http://www.jxscool.cn" target="_blank">97þۺϾƷþþۺ</a>| <a href="http://www.sifubaimeng.cn" target="_blank">˾þô߽AVۺӰԺ</a>| <a href="http://www.inconfont.cn" target="_blank">ԸߺþþþþþþAAAAA</a>| <a href="http://www.wps2009.cn" target="_blank">þþþAVרɫ </a>| <a href="http://www.dachanzui.cn" target="_blank">?VþþƷ</a>| <a href="http://www.gdguangjie.cn" target="_blank">99þùۺϾƷԭ</a>| <a href="http://www.wenmeiclass.cn" target="_blank">Vþþ</a>| <a href="http://www.lefanz.cn" target="_blank">ŮþþŮ</a>| <a href="http://www.liuxuehanguo.cn" target="_blank">˾þô߽</a>| <a href="http://www.glhu.cn" target="_blank">þþƷþ˼˼</a>| <a href="http://www.andz77.cn" target="_blank">޾þþһ </a>| <a href="http://www.bhga.cn" target="_blank">ɫ꼤þۺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>