Я упускаю что-то очевидное здесь, но учтите следующее,
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
немного погуглил меня,
Преобразование указателя в целое число
, которое рекомендует использовать uintptr_t,
int k = 10;
int *p = &k;
int i = (uintptr_t)p;
выше работает без ошибок, без предупреждений.Поэтому мой вопрос: k - это int, а p - указатель на int, указывающий на k, почему я получаю разыменование по ошибке p?