静态二维阵列和动态二维阵列的存储器映射之间的区别?

时间:2016-05-06 16:56:33

标签: c++ arrays multidimensional-array dynamic-arrays

根据我的理解,当我们使用像这样的指针创建数组时

    int **ptr = new int*[2];

    for(int i=0;i<2;i++)
     {
       ptr[i] = new int[3];
     }
它会看起来像这样 enter image description here

但是当我们创建一个像这样的静态数组时

 int arr[2][3]={1,2,3,4,5,6);

现在如果我们运行以下代码

cout<<"Address of arr = "<<&arr;
cout<<"arr is pointing to = "<<*arr;

它显示了相同的地址,这意味着arr是指向自身的指针,这看起来很混乱,因为如果数组是双指针,那么它如何指向自身。

很明显,编译器在幕后做了一些奇怪的事情。你能解释一下这是如何运作的。

1 个答案:

答案 0 :(得分:5)

  

它显示相同的地址,这意味着arr是指针   指着自己

不,这并不意味着。这意味着arr的地址与arr[0][0]的地址相同。这很有道理,因为arr[0][0]arr的一部分,实际上就是它的开头。同样地,你会发现我的左臂与你找到我的位置完全相同。

&arr*arr之间的区别是类型。 &arr的类型为int (*)[2][3](指向2个3个整数数组的数组的指针),而*arr的类型为int[3](3个整数的数组)。您的cout语句并未表达这种差异,只是因为未定义operator<<来表达它。