Это не особенно сложно ...
uintptr_t z = (uintptr_t)x;
Обратите внимание, что результат этого приведения зависит от реализации;единственная гарантия, что у вас есть это то, что если вы приведете z
обратно к int *
, вы получите исходный указатель обратно.
Кстати, не существует такого понятия, как «шестнадцатеричный адрес»;адреса - это адреса, их можно рассматривать как числа в любой базе, которая вам больше нравится, показывать их в шестнадцатеричном формате - это просто соглашение (которое имеет некоторые преимущества).