Статическая и динамическая адресация памяти?
Я инициализировал массив в 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. Пожалуйста, кто-нибудь может объяснить это? Что мне не хватает?
4 ответа
data
а также arr1
здесь очень разные data
это указатель на int
массив, arr1
является int*
массив. В качестве таких &data
это адрес указателя на массив, а не адрес первого элемента массива.
Эта строка кода
cout<< &data<<endl;
Печатает адрес переменной указателя, а не ее содержимое, полученное с new
,
data указывает на адрес в куче, но &data указывает на данные, которые находятся в стеке.
&data
возвращает адрес data
сама переменная.&data[0]
возвращает адрес первого элемента data
указывает на.