[英]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]返回相同的內存地址,因為它們指向數組的第一個元素的位置。 但是,我獲得了以下結果:
0x7fffb9f3dd40
0x24c6010
0x7fffb9f3dcf0
0x7fffb9f3dcf0
這似乎按預期對arr1起作用。 請能有人解釋一下嗎? 我想念什么?
data
和arr1
非常不同: data
是一個指向int
數組的指針, arr1
是一個int*
數組。 因此, &data
是指向數組的指針的地址,而不是數組的第一個元素的地址。
這行代碼
cout<< &data<<endl;
打印指針變量的地址,而不是通過new
獲得的內容。
&data
返回data
變量本身的地址。 &data[0]
返回第一個元素data
指向的地址。
數據指向堆上的地址,而&data指向數據,並且位於堆棧上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.