Мне здесь не хватает чего-то очевидного, но учтите следующее:
int k = 10;
int *p = &k;
int i = (int)p;
выше производит,
warning: cast from pointer to integer of different size
и последующие,
int k = 10;
int *p = &k;
int i = p;
причины,
warning: initialization makes integer from pointer without a cast
небольшой поиск в Google привел меня к
преобразованию указателя в целое число
, которое дает советы с использованием uintptr_t,
int k = 10;
int *p = &k;
int i = (uintptr_t)p;
выше не работает без ошибок, без предупреждений. Итак, мой вопрос: k - это int, а p - это указатель int, указывающий на k, почему я получаю сообщение об ошибке разыменования p?