Статическая и динамическая адресация памяти?

Я инициализировал массив в 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 указывает на.

Другие вопросы по тегам