C++:
Код:
int
&
addr
=
*
(
int
*
)
0xBAB230
;
- C style cast, в данном случае эквивалентный код выглядит так:
C++:
Код:
int
&
addr
=
*
(
reinterpret_cast
(
0xBAB230
)
)
;
- integer literal, интерпретируется как число.
- преобразование числа 0xBAB230 типа int в указатель на int. Фактически данная конструкция ничего не делает.
В данном случае она нужна для преобразования числа в указатель, на уровне системы типов языка.
В результате этого выражения получается указатель, который указывает на адрес
Далее идет
Код:
*(reinterpret_cast(...));
Разыменование указателя дает lvalue ссылку на тип под указателем.
Фактически работает примерно так: звездочка около типа заменяется амперсандом(ссылкой)
, где T - произвольный тип
После этого ссылка на
присваивается переменной addr.
Если говорить очень грубо - ссылка это всегда разыменованный указатель, который не может быть
НЕ ИНИЦИАЛИЗОВАН и
НЕ МОЖЕТ БЫТЬ ИЗМЕНЕН(сам адрес ссылки)
В результате выражения, получается ссылка типа
на адрес
. Любые операции с этой переменной будут взаимодействовать с ячейкой памяти по адресу
как с целым числом(
)