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