Указатели являются нормальными переменными, содержимое которых является адресом памяти. Эта память может быть памятью кучи или памятью стека. Не путайте указатель с объемом памяти, на который он указывает.
Ваш первый код выделяет пробел на кучу, который может содержать int. Вы сохраняете указатель на эту память на стек.
Ваш второй код выделяет пространство в стеке, которое может содержать int. Вы сохраняете указатель на эту память на стек.
Так оба указатели на стек, но только второй указывает на стек.
В обоих случаях тип, который вы назначаете, является примитивным типом.Примитивные типы не инициализируются по-умолчанию, если вы сразу не присвоить ему значение (ваш второй код), или использовать синтаксис конструктора, который также работает с кучей распределённых значений:
int *max = new int(0);
Тем же синтаксис может быть используется в вашем втором коде, кстати:
int myVar(20);
в случае, если вы заинтересованы: вы можете также определить указатели на куче. int*
тип указателей на int
с, так что просто идти вперед и выделить такой тип в куче:
new int*();
Это выражение возвращает int**
, который затем можно хранить где-то. Опять же, как правило, хранить этот указатель на указатель на стеке:
int **pointerToPointer = new int*();
Как int
с, вы можете инициализировать в новом экспрессии в какой-то указатель на междунар (здесь в int*
, с max
указателем сверху):
int **pointerToPointer = new int*(max);
Теперь у вас есть два указатели с одинаковым адресом: max
(указатель на стек) и некоторый указатель на куче, которые вы указываете при помощи pointerToPointer
, т.е. имеет место следующее (I разыменования `pointerToPointer, что приводит к оценке е хранится за этим указателем, который является указателем на целое число):
max == *pointerToPointer
Ваш второй фрагмент кода действительно создает int в стеке и указатель на этот int в стеке. –
просто пишите «new int (0)». Посмотрите здесь: http://en.wikipedia.org/wiki/New_%28C++%29 – Markon
«Я думаю, я создал указатель на кучу» Нет, вы создали «int» в куче и указатель на стек, который указывает на это 'int'. – leemes