Может ли обычная переменная содержать адрес другой переменной?
Да (возможно).
Компилятор обычно преобразует исходный код в машинный код для целевого процессора. Для машинного кода ЦП (почти для всех ЦП) нет типов - все (все инструкции, все указатели, все целые числа, все числа с плавающей запятой, ...) являются просто структурами битов; и процессор не имеет представления, является ли последовательность битов (в памяти или в регистре) адресом, целым числом или чем-то еще.
Это означает, что если вы можете убедить компилятор сохранить указатель в целое число, сам ЦП не будет знать или заботиться.
для С; довольно легко убедить компилятор сохранить указатель в int
, либо выполнив a = &b;
и проигнорировав любое предупреждение; или сделав a = (int)&b;
, чтобы подавить предупреждение. Конечно, это не будет переносимым, и значение может быть искажено для соответствия (например, если указатель 64-битный, а int
32-битный, то вы можете ожидать, что половина указателя будет отброшена для получения значения вписывается в int
).