取消引用二维数组

时间:2016-04-18 17:43:01

标签: c++ arrays pointers

我试图了解如何在内存中创建2D数组,我无法解释指针这种奇怪的行为。

以下代码:

int arr[4][3]={
    {1,2,3},
    {4,5,6},
    {7,8,9},
    {10,11,12}
};

int main(){
    cout<<"&arr = "<<&arr<<endl;
    cout<<" arr = "<<arr<<endl;
    cout<<"*arr = "<<*arr<<endl;
    cout<<"*(int*)arr = "<<*(int*)arr<<endl;
}

产生输出:

&arr = 0x8049bc0
arr = 0x8049bc0
*arr = 0x8049bc0
*(int*)arr = 1

代码:http://ideone.com/CzeVMu

arr是&#34; an array of arrays that decays into a pointer to an array&#34;和*arr(相当于arr[0])是一个数组。

由于arr*arr的值相同,这意味着arr指向的内存位置正在存储它自己的地址。但是内存位置实际上存储了2D数组的第一个元素,可以通过首先将类型转换为int*来检索,如下所示:*(int*)arr。这怎么可能?

0 个答案:

没有答案