Преобразование int в int *, а затем обратно в int

Мне здесь не хватает чего-то очевидного, но учтите следующее:

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?

5
задан Community 23 May 2017 в 11:47
поделиться