我试图了解如何在内存中创建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
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
。这怎么可能?