Ваша инициализация указателя выглядит правильно. Проблема заключается в том, что вы пытаетесь напечатать переменную типа int**
(то есть «указатель на указатель на int
»), используя спецификатор формата %d
, который предназначен для значений int
.
Печать int
значение
Если вы хотите напечатать значение melissa
(т.е. 5), которое, по сути, косвенно указывает на ramon
, вам необходимо отменить ссылку на значение указателя правильное число раз.
Разыменование указателей выполняется с помощью оператора *
, и это по существу означает «значение, на которое указывает указатель».
- Однажды отменив ссылку на него (т.е.
*ramon
), вы получите значение int*
, на которое указывает ramon
.
- Повторная ссылка на него получит значение
int
, на которое указывает обратное значение int*
.
Вы можете связать вместе операторы де-ссылки, чтобы получить то, что вы хотите:
printf("ramon = %d\n", **ramon);
Значение указателя печати
Если вы хотите напечатать значение указателя (то есть ячейки памяти), вы можете использовать спецификатор формата %p
. Это выведет адрес памяти в шестнадцатеричном виде:
printf("ramon = %p\n", ramon); // Print the "pointer to the pointer to melissa"
printf("ramon = %p\n", *ramon); // Print the "pointer to melissa"