Следующий пример из Википедии.
int arr[4] = {0, 1, 2, 3};
int* p = arr + 5; // undefined behavior
Если я никогда не разыскиваю p, то почему поведение arr + 5 только undefined? Я ожидаю, что указатели будут вести себя как целые числа - за исключением того, что при разыменовании значение указателя считается адресом памяти.