我在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,这似乎可以正常工作。有人能解释一下吗?我错过了什么?
data
和arr1
在这里是非常不同的:data
是指向int
数组的指针,arr1
是指向int*
数组的指针。因此,&data
是指向该数组的指针的地址,而不是该数组的第一个元素的地址。
这行代码
cout<< &data<<endl;
打印指针变量的地址,而不是通过new
获取的内容。
&data
返回data
变量本身的地址。&data[0]
返回data
指向的第一个元素的地址
data指向的是堆上的地址,而&data指向的是位于堆栈上的数据。