Указатель хранит адрес чего-либо (или NULL). Таким образом, int * может хранить адрес int. Вы получаете адрес чего-либо с унарным оператором &
.
Итак, что означает хранить 10
в указателе типа int? Ну, 10 не является адресом int, поэтому вы получаете предупреждение «инициализация делает указатель из целого числа без приведения», и так как вы храните в int * что-то еще, кроме адреса типа int, и пытаетесь разыменовать его , вы получаете неопределенное поведение.
В вашем случае, скорее всего, происходит то, что 10 интерпретируется как адрес памяти, и когда вы разыменовываете указатель, он выходит, чтобы получить все, что находится по этому адресу (адрес памяти 10 в вашем случае). Там, вероятно, ничего нет, эта область памяти не отображается, и вы segfault.