代码之家  ›  专栏  ›  技术社区  ›  Fari Anderson

指向具有相同类型的同一地址的指针具有不同的值

  •  -3
  • Fari Anderson  · 技术社区  · 11 月前

    我有两个相同类型的指针指向相同的地址,但值不同。这在我看来很奇怪。

    • 这是由于未定义的行为吗?
    • 程序会在地址上骗我们吗?

    编辑:很抱歉,我没有注意到地址之间的区别,它们在右边的第二位数字上是不同的。

    #include <iostream>
    
    int main()
    {
      int* array = new int[]{1,2,3,4,5};
      int* p = array; 
      
      //delete[] array;
      array = new int[]{6,7,8,9,10};
    
      for(int i=0; i<5; i++)
      {
        std::cout << &(array[i]) << " => " << array[i] <<'\n';
        std::cout << &(p[i]) << " => " << p[i] <<'\n';
        std::cout << "--------------------\n";
      }
    }
    

    当注释'delete[]数组'时,输出将是:

    0x55763f7bc2d0 => 6
    0x55763f7bc2b0 => 1
    --------------------
    0x55763f7bc2d4 => 7
    0x55763f7bc2b4 => 2
    --------------------
    0x55763f7bc2d8 => 8
    0x55763f7bc2b8 => 3
    --------------------
    0x55763f7bc2dc => 9
    0x55763f7bc2bc => 4
    --------------------
    0x55763f7bc2e0 => 10
    0x55763f7bc2c0 => 5
    --------------------
    

    不评论时,值当然是相等的。

    1 回复  |  直到 11 月前
        1
  •  -1
  •   OfNothing    11 月前

    欢迎使用c++!没有什么奇怪的事情发生。显示的输出正是人们所期望的。

    创建新数组时,它返回指向第一个元素的指针。当创建第一个数组时,变量 array 指向1。然后变量 p 创建并设置为等于 阵列 因此,此时变量都具有相同的值,并且都指向1。

    接下来,创建一个新数组,并将指针值分配给变量 阵列 然后它指向6。变量 p 没有改变,仍然指向1。

    查看以下地址 &(array[i]) &(p[i]) 你可以看到它们与预期的不同。虽然b和d看起来很相似,我不得不盯着它看一分钟,才意识到它们是不同的。