静态和动态分配内存寻址?
Static and dynamic allocation memory addressing?
我使用静态和动态分配在 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] 与 return 相同的内存地址,因为它们指向数组第一个元素的位置。但是,我得到了以下结果:
0x7fffb9f3dd40
0x24c6010
0x7fffb9f3dcf0
0x7fffb9f3dcf0
对于 arr1,这似乎符合预期。请问有人可以解释一下吗?我错过了什么?
这行代码
cout<< &data<<endl;
打印指针变量的地址,不是用new
获得的内容。
data
和 arr1
在这里非常不同:data
是指向 int
数组的指针,arr1
是 int*
大批。因此 &data
是数组指针的地址,而不是数组第一个元素的地址。
&data
returns data
变量本身的地址。
&data[0]
returns data
指向的第一个元素的地址。
data 指向堆上的地址,但 &data 指向位于堆栈上的数据。
我使用静态和动态分配在 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] 与 return 相同的内存地址,因为它们指向数组第一个元素的位置。但是,我得到了以下结果:
0x7fffb9f3dd40
0x24c6010
0x7fffb9f3dcf0
0x7fffb9f3dcf0
对于 arr1,这似乎符合预期。请问有人可以解释一下吗?我错过了什么?
这行代码
cout<< &data<<endl;
打印指针变量的地址,不是用new
获得的内容。
data
和 arr1
在这里非常不同:data
是指向 int
数组的指针,arr1
是 int*
大批。因此 &data
是数组指针的地址,而不是数组第一个元素的地址。
&data
returns data
变量本身的地址。
&data[0]
returns data
指向的第一个元素的地址。
data 指向堆上的地址,但 &data 指向位于堆栈上的数据。