静态和动态分配内存寻址?

时间:2015-08-12 14:06:17

标签: c++ c++11 dynamic-memory-allocation static-memory-allocation

我使用静态和动态分配在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;

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

  

0x7fffb9f3dd40

     

0x24c6010

     

0x7fffb9f3dcf0

     

0x7fffb9f3dcf0

这似乎与arr1一样有效。有人可以解释一下吗?我错过了什么?

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

这行代码

cout<< &data<<endl;

打印指针变量的地址,而不是用new获得的内容。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

数据指向堆上的地址,但&amp;数据指向数据并且存在于堆栈中。

相关问题