C не проверяет адреса памяти. Это одна из вещей, которая делает c невероятно эффективным, но и более сложным для программирования. Указатель - это просто переменная, как и любая другая, которая хранит двоичные данные и отличается только тем, что данные должны быть адресом памяти. Арифметика указателей совершенно верна в случае, например, массивов c.
Вы также можете установить указатель на случайное или произвольное значение. Но если вы не создадите его таким образом, разыменование любого адреса не из компилятора или malloc приведет либо к доступу к некоторому пространству памяти ваших собственных программ, либо к ошибке сегментации.