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

Я инициализировал массив в 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 [0] возвращает тот же адрес памяти, который указывает на местоположение первого элемента массива. Однако я получил следующие результаты:

0x7fffb9f3dd40

0x24c6010

0x7fffb9f3dcf0

0x7fffb9f3dcf0

Казалось, что это работает, как ожидалось для arr1. Пожалуйста, кто-нибудь может объяснить это? Что мне не хватает?

0

Решение

data а также arr1 здесь очень разные data это указатель на int массив, arr1 является int* массив. В качестве таких &data это адрес указателя на массив, а не адрес первого элемента массива.

2

Другие решения

Эта строка кода

cout<< &data<<endl;

Печатает адрес переменной указателя, а не ее содержимое, полученное с new,

0

&data возвращает адрес data сама переменная.
&data[0] возвращает адрес первого элемента data указывает на.

0

данные указывают на адрес в куче, но &данные указывают на данные, которые живут в стеке.

0
По вопросам рекламы [email protected]