Кастинг (то, что вы делаете, когда ставите (int)
перед чем-то), магический в этом смысле. Он возьмет любую вещь и превратит ее в любую другую вещь (в данном случае * 1002), независимо от того, имеет ли это смысл. Вам следует избегать использования кастинга, если вы абсолютно не уверены, что должны, и другого пути нет.
Код вашей программы существует в памяти, как и переменные. Здесь происходит то, что приведение поворачивает число, представляющее, где в памяти находится код, в целое число. Это целое число может быть больше или меньше в зависимости от того, где в памяти компилятор и компоновщик решили разместить код для функции.
Ваш оператор printf вообще не присваивает. %x
- это просто заполнитель, говорящий «Возьмите один из параметров, переданных в printf, и распечатайте его здесь». Тот факт, что это 'x', не имеет ничего общего с именем переменной в вашей программе. «X» говорит: «Напечатайте это целое число в базе 16 (шестнадцатеричное) вместо обычной базы 10». Если вы введете %u
или %d
, он все равно будет работать, и вы получите число, представленное как целое число без знака на основе 10 или целое число со знаком в базе 10.