В чем разница между новым указателем и простым указателем - PullRequest
0 голосов
/ 06 мая 2019

В чем разница между этими двумя декларациями:

  • int *p = new int;
  • int *q;

Ответы [ 2 ]

1 голос
/ 06 мая 2019
 int *p = new int;
 *p = 8;

Первый оператор объявляет новую переменную p указателем на int и инициализирует ее адресом, возвращаемым new int, который является действительным адресом памяти для хранения int.Второй оператор присваивает значение 8 int по адресу памяти, на который указывает p.

int *q;
*q = 8;

Теперь первый оператор не инициализирует указатель q, который, следовательно, не будет иметьзначимое значение.Затем второй оператор пытается выполнить запись в адрес памяти, который, по всей вероятности, не является адресом, где такая операция разрешена, и в результате программа завершится сбоем (скорее всего, из-за ошибки сегментации).

0 голосов
/ 06 мая 2019
int *p = new int;

Это декларация.Он объявляет переменную типа int *.Имя переменной p.Переменная инициализируется копией с выражением new int.

int *q;

Это объявление.Он объявляет переменную типа int *.Имя переменной q.Переменная инициализируется по умолчанию.

...