zoukankan      html  css  js  c++  java
  • 对偏移表达式的 思考过程—how offset macro is think out

          /* 小结:

          品味取成员的偏移,不是支取偏移,不是先取偏移再成员。

          不能对常量取& 的解决。

          指针运算的前提。某某指针不能转换为另一个指针

          解决宏的方法。先一个表达式一个表达式的测试,再转化为宏。

          最后,hxf总结出来的一般性原则,,任意地址,任意对象。。使用只不过是个geek

          */

          /************************************************************************/

    /************************************************************************/

    /* 对偏移的宏 由来的 思考                                                                   */

    /************************************************************************/

    typedef struct z

    {

          int a;

          double b;

          long c;

    } myZ;

    void test_偏移宏的变迁(){

          cout<<& ( ( myZ *)0 )->b ;// test for cool

          cout<<endl;

          cout<<& (   (myZ *)  (  (void *) 0)  )->b; // 多加括号,包括强制转换符号

          cout<<endl;

         

          //

          //

          cout<<"reay for void *"<<endl;

          & (   (myZ *)  (  (void *) 0x1234)  )->b; // 多加括号,包括强制转换符号

          & (   (myZ *)  (  (void *) 0x987600000)  )->b; // 多加括号,包括强制转换符号

          cout<<     & (   (myZ *)  (  (void *) 0x9876)  )->b;

          cout<<endl;

          cout<<     & (   (myZ *)  (  (void *) 0x9876)  )->a;

          cout<<endl;

          //   cout<<     & (   (myZ *)  (  (void *) 0x9876)  ) 单独报错误

          //

          //后面加了->a

          cout<<"验证任意的, one is  0x987600000 ; one is void * 0 ; one is just 0 ;one is for 0x123456789 …. "<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  (void *) 0x987600000)  )->b  -   (unsigned int)  & (   (myZ *)  (  (void *) 0x987600000)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  (void *) 0)  )->b  -    (unsigned int)  & (   (myZ *)  (  (void *) 0)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  0)  )->b  -    (unsigned int)  & (   (myZ *)  (  0)  ) ->a );

          cout<<endl;

          //扩展

          cout<<      ( (unsigned int) & (   (myZ *)  (  0x123456789)  )->b  -   (unsigned int)  & (   (myZ *)  (  0x123456789)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  -1)  )->b  -   (unsigned int)  & (   (myZ *)  ( -1)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>32)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>32)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>64)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>64)  ) ->a );

          cout<<endl;

          cout<<      ( (unsigned int) & (   (myZ *)  (  1>>65)  )->b  -  (unsigned int)  & (   (myZ *)  ( 1>>65)  ) ->a );

          cout<<endl;//我的机器位,看来已经溢出了。

          /************************************************************************/

    }

    int _tmain(int argc, _TCHAR* argv[]){

          test_偏移宏的变迁();

          getchar();

          return 0;

    }

    image

  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/titer1/p/2411219.html
Copyright © 2011-2022 走看看