In the book C Primer Plus, Fifth Edition, in Chapter 10. Arrays and Pointers:
C guarantees that, given an array, a pointer to any array element, or to the position after the last element, is a valid pointer. But the effect of incrementing or decrementing a pointer beyond these limits is undefined. Also, you can dereference a pointer to any array element. However, even though a pointer to one past the end element is valid, it's not guaranteed that such a one-past-the-end pointer can be dereferenced.
I confused why a valid pointer might not be dereferenced,
and what the one-past-the-end pointer is used for?