【问题标题】:Assigning a value to the pointer to an object为指向对象的指针赋值
【发布时间】:2017-05-18 07:21:53
【问题描述】:
   class Distance
   {
        public:
           int a;
   };
   int main()
    {
        Distance d1; //declaring object
        char *p=(char *)&d1;
        *p=1;
        printf("\n %d ",d1.a);
        return 0;
    }

这是我的代码。

当我将 'a' 的值传递为 256,512 时,我分别得到 257,513 但对于像 这样的值>1000 我得到 769,对于像 16,128,100 这样的值,我得到 1

首先,我认为这可能与 2 的幂因二进制表示的变化而增加 1 有关。但是将 1 添加到 1000 的二进制表示不会给我 769。

请帮助我理解这段代码。

【问题讨论】:

    标签: class pointers c++14


    【解决方案1】:

    *p = 1 将最后一个字节(char)设置为000000001

    当您将 int 类型转换为 char 时, (int)1000 的二进制是 (binary)0000001111101000 您正在为最后 8 位分配 (int)1,即 (binary)0000001100000001,即 769

    使用 256512 有效,因为您更改的最后 8 位全为零,即 (int)256512 is (binary)111110101000000000,因此将最后一位设为 1 即可获得 (binary)111110101000000001 which is (int)256513

    我认为(不确定)16,128,100 得到 1,因为该整数远远超出 int 范围,因此未分配,并且在创建类对象时将 a 设置为 0。因此将最后一位设置为 1 使a = 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2016-10-05
      • 2011-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多