Адрес памяти в динамическом распределении - PullRequest
2 голосов
/ 04 октября 2011
#include <iostream>

int main()
{
  int anything[] = {5};
  int *something = new int;
  *something = 5;

  std::cout << &anything  << "==" << &anything[0]  << "==" << anything  << std::endl;
  std::cout << &something << "!=" << &something[0] << "==" << something << std::endl;
}

Почему адрес памяти в &something отличается от &something[0] и something?Хотя это динамическое распределение, я не понимаю, почему адрес памяти отличается.Я попробовал это с более чем одним значением;это то же самое.Здесь я использовал одно значение для обоих для простоты.

Ответы [ 2 ]

4 голосов
/ 04 октября 2011

&something - это адрес памяти самого указателя (эй, ему нужно где-то хранить это значение!), А &something[0] - это адрес фактической памяти, в которой хранятся ваши данные.

2 голосов
/ 04 октября 2011

something - указатель.&something - адрес этого указателя.&something[0] - это адрес первого элемента, на который указывает указатель, который полностью отличается от адреса указателя.something - это значение указателя, которое также является адресом элемента, на который указывает.

Я уверен, что эта тема уже была рассмотрена много раз, я надеюсь, что сделал это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...