У меня небольшие проблемы с пониманием концепции указателей, и один из них таков:
Давайте объявим переменную целочисленного типа n и указатель на нее *p.int n=23,*p;
Теперь,
> p=&n;
, если я не ошибаюсь, присваивает адрес переменной n (скажем, 3000) p.
Таким образом, cout<<p<<" "<<*p;
выводит 3000 и 23 соответственно.
Я сомневаюсь, что предположим, что мы сделали что-то вроде этого: p=5;
т.е. присвоение числового значения переменной, предназначенной для хранения ячеек памяти, что произойдет?
Перемещена ли переменная в ячейку памяти '5' (скорее всего, нет) или указатель только что преобразован в «int» и сделан для хранения значения 5? Я бы попробовал это сам, только возня с памятью моей системы заставило меня задуматься.
Кроме того, когда мы объявляем любую переменную (предположим, int с пространством в 2 байта), сохраняется ли она в случайном месте памяти, таком как 3000, 101, 2700 или что-то в этом роде, или сохраняется в 0,2,4 и т. д.? И хранится ли следующая объявленная переменная прямо в следующей (например, 3002, 103 или 2702) или между ними есть какой-то промежуток?
5
не конвертируется вint*
. (Если бы вы действительно попробовали это сделать, то, вероятно, обнаружили бы это сами.) - person Kerrek SB   schedule 27.01.2017p = (int*)5;
- person alexeykuzmin0   schedule 27.01.2017int
, поэтому для таких экспериментов лучше использоватьstd::ptrdiff_t
. - person alexeykuzmin0   schedule 27.01.2017intptr_t
- это подходящий стандартный тип. - person NathanOliver   schedule 27.01.2017