静态和动态分配内存寻址



我在c++中使用静态和动态分配初始化了一个数组。

// dynamic allocation... len is input by user.
int *data = new int [len];
// print memory address
cout<< &data<<endl;
cout<< &data[0]<<endl;
// static allocation...
int *arr1[10];
// print memory address
cout<< &arr1<<endl;
cout<< &arr1[0]<<endl;

我期望&data和&data[0]返回相同的内存地址,因为它们指向数组第一个元素的位置。然而,我得到了以下结果:

0 x7fffb9f3dd40

0 x24c6010

0 x7fffb9f3dcf0

0 x7fffb9f3dcf0

对于arr1,这似乎可以正常工作。有人能解释一下吗?我错过了什么?

dataarr1在这里是非常不同的:data是指向int数组的指针,arr1是指向int*数组的指针。因此,&data是指向该数组的指针的地址,而不是该数组的第一个元素的地址。

这行代码

cout<< &data<<endl;

打印指针变量的地址,而不是通过new获取的内容。

&data返回data变量本身的地址。&data[0]返回data指向的第一个元素的地址

data指向的是堆上的地址,而&data指向的是位于堆栈上的数据。

最新更新