Комментарий
// Setting the pointer to hold the memory address of my first variable.
кажется правильным, но прокомментированный код не является:
number_pointer = random_number;
random_number
- это число, number_pointer
- это указатель.
Числои указатель - это разные типы, и компилятор должен предупредить вас, что это несовместимые типы.
Присвоение значения переменной несовместимого типа приводит к потере данных (когда тип переменной использует меньше байтов, чем тип значения),Но главная опасность при назначении данных несовместимых типов - это искажение данных.
В вашем случае значение number_pointer
(15
, которое является числом) сохраняется в переменной random_pointer
.Когда используется значение random_pointer
, 15
интерпретируется как указатель, то есть адрес в памяти, и это совершенно неверно.
Выражение *number_pointer
затем пытается прочитать память по этому адресуи это приводит к ошибке доступа, которая наказывается ОС (которая завершает вашу программу).
Источником проблемы является отсутствие &
(оператор "address of") перед random_number
в задании выше.Он должен читать:
number_pointer = &random_number;
Это означает, что переменная number_pointer
(типа «указатель на int») будет хранить адрес переменной random_number
(типа «int»).Они совместимы и логика программы правильная.Использование оператора разыменования (*
) затем успешно считывает целочисленное значение, хранящееся по адресу, указанному в переменной number_ponter
.