hopy | 侯佩

大熊猫侯佩 ! 不要和偶比懒,偶懒得和你比 -_-b

hope yangID:mydo
41105次访问,排名2662好友57人,关注者108
asm & C
mydo的文章
原创 34 篇
翻译 0 篇
转载 20 篇
评论 90 篇
hopy|侯佩的公告

intel 还是 at&t ?这是个问题!

贪吃贪睡的大熊猫侯佩!


最近评论
chtitaxie:不错,相当好.
goho100:特别想学黑客技术,但是却什么都不懂,有劳费心了!
mldstk:wow power leveling
huyongzs:哇,厉害。
chenjava:高手,,可以把完整代码放出来吗?FarAddr是指向哪个地址的啊?
文章分类
收藏
    相册
    程人画册
    生随画册
    常逛网站
    aogo汇编站
    sourceforge
    Windows Sysinternals
    www.0ginr.com
    www.reactos.org
    www.rootkit.com
    个人电脑
    中国IT实验室
    中国电子顶级开发网
    安全焦点
    安全矩阵
    安徽机票网
    看雪论坛
    第8个男人
    邪恶八进制论坛
    驱动开发网
    高端调试
    朋友的blog(排名不分先后)
    Chen 的 blog
    信仰 的 blog
    兔子 的 blog
    十月印象 的 blog
    存档
    订阅我的博客
    XML聚合  FeedSky

    原创 由ANSI C标准咬文嚼字发现滴东东收藏

    新一篇: [原创]另类调用 printf 完成任务的方法 | 旧一篇: [原创]Unlocker加强版技术特征

     

    由ANSI C标准咬文嚼字发现滴东东
     
    乱弹
    奥运磨炼曲正酣,钢铁功夫解眼馋;
    步履蹒跚遭埋怨;呆呆傻傻惹人烦;
    浑浑噩噩心难安;四目相对眼茫然;
    龙游浅水被虾戏;死不悔改表乱弹!
                              (表:biao第四声)
         
          侯佩|hopy
       2008年05月08日于合肥电心
     
     
        忙来有事,开始重读<< C专家编程 >>。
        在第1章的1.9节[阅读ANSI C标准,寻找乐趣和裨益](第19页)中找到
    貌似可以展开的东西,我变通作者的意思举例如下:
     
    [例0]
    int main()                      //0
    {                            //1
        char *p;                    //2
        const char *cp;                 //3
                                //4
        p = cp;    //Error,but why?         //5
        cp = p;    //Right,but why?         //6
                                //7
        return 0;                   //8
    }                           //9
     
    请解释为什么第5行错误而第6行正确。
    无从下手?先看看作者是怎么说的吧!作者首先说:
     
        标准规定编译器只有在违反语法规则和约束条件的情况下才
    能产生错误信息!
     
    然后作者变戏法似的在ANSI C 的第6.3.16.1节中拎出一个约束条件A:
     
        要使上述赋值形式合法,必须满足如下条件之一:
       a.两个操作数都是指针;
       b.两个指针都指向有限定符或无限定符的相容类型;
       c.左边指针指向的类型必须具有右边指针所指向类型的全部限定符。
     
    显然 p 和 cp 都指向 char 因此是相容的,而且cp的限定符包容p的限定符,
    因此第6行正确,第5行则错误。
     
        So easy,下一个例子:
     
    [例1]
    int main()                      //0
    {                           //1
        char **pp;                  //2
        const char **cpp;               //3
                                //4
        cpp = pp; //Error,but why?         //5
        pp = cpp; //Error or Right?        //6
                                //7
        return 0;                   //8
    }                           //9
     
    现在请再解释为什么第5行是错的?按照如上推理,貌似 const char **
    包容 char ** 呀,为什么是错的呢?现在偶来尝试解释一下,看大家
    能不能听懂:
     
        pp指向的类型是 char*,cpp指向的类型是 const char*,两者
    不相容,违反了约束条件A中的b这一条,所以是错的。That's all.
     
    由此可知第6行也是错的。现将例0做一番扩展:
     
    [例2]
    int main()                      //0
    {                           //1
        char *p;                    //2
        register char *rp;              //3
        volatile char *vp;              //4
                                //5
        p = rp;    //???                //6
        p = vp;    //???                //7
                                //8
        return 0;                   //9
    }                           //10
     
    请问第6行和第7行谁对谁错?留给大家思考吧,呵呵。
    如果你依然清醒,那么请不要动手,只动脑思考一道题:
     
    [题目]
    typedef char * p2c;
     
    int main()
    {  
        char **pp;
        const **cpp;
       
        p2c *_pp;
        const *_cpp;
       
        pp = _pp;                //A
        _cpp = _pp;                 //B
        _pp = _cpp;                 //C
        _cpp = pp;               //D
        cpp = _cpp;                 //E
       
        return 0; 
    }
     
    请判断A-B的对错,并说说为什么?
     
    以上文章纯属乱弹,如有不对之处请毫不犹豫的指出吧!:)
    另外最后的题目是给我自己恢复记忆留的(不是恢复人性,因为偶不
    是... -_-b),各位不要当真,一笑置之吧。
     
                               
                          侯佩的侯,侯佩的佩|hopy
                        2008年05月08日2051第一稿

    发表于 @ 2008年05月09日 11:00:00|评论(loading...)|

    新一篇: [原创]另类调用 printf 完成任务的方法 | 旧一篇: [原创]Unlocker加强版技术特征

    评论:没有评论。

    发表评论  


    登录
    Csdn Blog version 3.1a
    Copyright © hopy|侯佩