Thank you so much.
I checked the book again......
The book is C Primer Plus, Fifth Edition (is that book not good?)
In Chapter 10. Arrays and Pointers, it said:
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.
It is only for the one-past-the-end pointer.
I confused why a valid pointer might not be dereferenced.